use*_*560 10 c++ mingw flush endl
我有3台计算机,其中两台使用Windows 8.使用最新版本的MinGW的g ++(4.8.1-4),我的hello world程序会在我在Windows 8计算机上编译和运行时冻结,但不会在Windows 7中运行.
#include <iostream>
int main()
{
std::cout << "Hello, World!" <<std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这在g ++中编译得很好,但运行a.exe会显示"Hello,World!" 然后会弹出一个窗口并说"a.exe已停止工作,Windows可以在线检查程序的解决方案......"等.
有没有人见过这个问题.
另外,我试过"std :: cout <<"Hello,World!\n"<< std :: flush;" 这也有同样的问题.似乎每个刷新缓冲区的函数都会导致崩溃.
按照Eric的建议,我重新编译了程序并在gdb中运行它并得到以下输出:
Program received signal SIGILL, Illegal instruction.
0x00405065 in _Jv_RegisterClasses ()
Run Code Online (Sandbox Code Playgroud)
在第二个实例中,'\n'应该在任何情况下都会导致输出刷新,尽管在Windows中我认为控制台输出是立即的(或者在短暂超时之后可能是自动的),在任何情况下都没有显式刷新.
我建议进行以下实验:
1)通过使用C库查看它是否特定于C++库(在MinGW中使用Microsoft的C运行时而不是glibc):
#include <stdio.h>
int main()
{
printf( "Hello, World!\n" ) ;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
2)通过以下方式消除退出代码:
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
3)根本没有新行:
#include <iostream>
int main()
{
std::cout << "Hello, World! ;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
4)尝试不同的编译器选项,例如优化级别,或者-fno-builtin例如,或者建议在这里:-static-libgcc -static-libstdc++(虽然我怀疑``-static-libgcc`本身会产生什么影响,因为MinGW的使用Microsoft的C运行时DLL和静态库仅适用用微软的工具).