Ale*_*lex 2 c++ compiler-construction g++ stdout
我正在开发一个项目,我调用一个触发段错误的函数.我解决了这个问题,但在此过程中我发现了以下情况.
当我的代码是格式时;
main(){
...
std::cout << "Looking for segfault\n"; // this does not print
buggyFunction(); // crashes in here
...
}
buggyFunction(){
...
thing_that_causes_segfault;
...
}
Run Code Online (Sandbox Code Playgroud)
"寻找段错误"行不会打印到STD,程序在buggyFunction中崩溃.很好,但是当我在buggyFunction()中添加一个cout行时;
main(){
...
std::cout << "Looking for segfault\n"; // this now *does* print
buggyFunction();
...
}
buggyFunction(){
...
std::cout << "Now we're INSIDE buggy function\n"; // this prints too
thing_that_causes_segfault;
...
}
Run Code Online (Sandbox Code Playgroud)
在马车内部功能,两行打印(然后它崩溃).
为什么我们在输出中看到这种差异,这取决于增加这个额外的输出调用?它与流的处理有关还是其他什么?我正在使用g ++(Ubuntu 4.4.3-4ubuntu5)4.4.3.
原因是它cout有一个缓冲区,它只会传递给系统函数并在缓冲区满时写入控制台.您的第二次使用cout恰好溢出缓冲区,因此它调用操作系统并清空缓冲区.如果要保证输出已离开缓冲区,则必须使用std::flush.您可以结束一行并刷新缓冲区std::endl.
| 归档时间: |
|
| 查看次数: |
205 次 |
| 最近记录: |