c++ - std::endl 使 Windows 8 崩溃,使用 MinGW 编译

标签 c++ mingw flush endl

我有 3 台计算机,其中两台使用 Windows 8。使用最新版本的 MinGW 的 g++ (4.8.1-4),每当我在 Windows 8 计算机上编译和运行时,我的 hello world 程序就会卡住,但在 Windows 7 中不会。

#include <iostream>
int main()
{
    std::cout << "Hello, World!" <<std::endl;
    return 0;
}

这在 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 ()

最佳答案

在第二种情况下,'\n' 在任何情况下都应该导致输出刷新,尽管在 Windows 中我相信控制台输出在任何情况下都是立即的(或者可能在短时间超时后自动输出)而无需显式刷新。

我建议进行以下实验:

1)使用C库查看是否是C++库特有的(MinGW中使用的是微软的C runtime而不是glibc):

#include <stdio.h>
int main()
{
    printf( "Hello, World!\n" ) ;
    return 0;
}

2) 通过以下方式消除退出代码:

int main()
{
    return 0;
}

3) 根本没有换行符:

#include <iostream>
int main()
{
    std::cout << "Hello, World! ;
    return 0;
}

4) 尝试不同的编译器选项,例如优化级别,或 -fno-builtin,或按照建议 here : -static-libgcc -static-libstdc++ (尽管我怀疑``-static-libgcc` 本身会产生任何影响,因为 MinGW 使用 Microsoft 的 C 运行时 DLL,而静态库仅适用于 Microsoft 的工具) .

关于c++ - std::endl 使 Windows 8 崩溃,使用 MinGW 编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20621639/

相关文章:

python - 使用 MinGW 编译 Cython - 未定义引用 PyExc

c - 将 C 编译从 MinGW 移植到 VisualStudio(nmake)

python bsddb 删除条目时不会刷新

c - Windows 10 : Clang, "stdio.h"找不到

C++ 嵌套结构的 typedef(元类)编译错误

c++ - 转到定义失败 - Visual Studio 2008

c++ - 我可以阻止复制构造函数有一些异常(exception)吗?

bash - 在 bash 中,如何强制刷新打印到终端的不完整行

c - 输入/输出问题

c++ - 使用MinGW-w64在Win consoleapi中获取奇怪的struct和typedef错误