Linux报错笔记:关于endl
今天程序找bug的时候发现了一个奇奇怪怪的问题
cout << endl << "-------" << endl;
cout << "Start processing sequence ..." << endl;
cout << "Images in the sequence: " << nImages << endl << endl;
cout<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1^^^^^^^^^^^^^^^^^^^^^^^^^^^^^";
源程序本身有其他问题,但是双线程下这段代码在程序运行后只输出
------- Start processing sequence ... Images in the sequence: 1242
两个线程总有一个线程的并不能显示下面这个输出
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
不知道为什么程序卡在这里,后来发现是endl的锅
endl有两个意思,首先是将“\n”写入输出流,第二个是调用flush函数,刷新缓冲区,如果去掉endl的话,之前的内容还会在缓冲区,那就不会立刻打印出来,然后程序在下一段还没来得及打印的时候就崩了,所以一直不显示这个输出,加了endl就能正常显示了。

浙公网安备 33010602011771号