Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ hello world的调试构建崩溃,具体取决于优化级别_C++_Gcc_Mingw_Windows 8.1 - Fatal编程技术网

C++ hello world的调试构建崩溃,具体取决于优化级别

C++ hello world的调试构建崩溃,具体取决于优化级别,c++,gcc,mingw,windows-8.1,C++,Gcc,Mingw,Windows 8.1,当我进行调试构建时,这个简单的hello world程序(取自eclipse)在退出时崩溃: #include <iostream> using namespace std; int main() { cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!! return 0; } 当我运行test.exe时,控制台将打开(带有消息),但我也会收到一条崩溃消息(test

当我进行调试构建时,这个简单的hello world程序(取自eclipse)在退出时崩溃:

#include <iostream>
using namespace std;

int main() {
    cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
    return 0;
}
当我运行test.exe时,控制台将打开(带有消息),但我也会收到一条崩溃消息(test.exe已停止工作),错误代码为0xc0000005(访问冲突)。现在,如果我用-O1而不是-O0编译同一个文件,那么生成的可执行文件运行时不会出现问题。我运行的是Windows8.1(64位),可执行文件是32位,我使用的是mingw,g++版本是4.8.1


有人知道是什么原因导致了这个问题吗?

如果在这样一个简单的代码上有问题,那么很可能是这个版本的mingw中有一个bug,它使用了这组编译器键。在mingw支持中编写有关此行为的内容可能会很有用。

因为这是一个很短的程序,所以查看程序集可能会很有用。就ur mingw而言,它是64位还是32位?mingw安装是32位。使用
g++-O0-g3-S main.cpp
获取程序集,它将保存在名为main.S的文件中,并发布到此处。是没有g3的版本(因为它增加了6000多行调试内容)。我发现这次崩溃与endl有关(请参阅)。你可能是对的,我在他们的bugtracker中搜索了一下,找到了相似的,可能相同的。我尝试从我的代码中删除std::endl,即使使用-O0,它也运行得很好,所以这似乎有问题。当我能够缩小搜索范围时,我发现了这个问题,解决方法似乎是静态链接std库。
g++ -O0 -g3 -Wall -c -fmessage-length=0 -o main.o "..\\main.cpp" 
g++ -o test.exe main.o