c++ - 简单的程序崩溃

标签 c++ gcc crash g++

所以我一直在使用 MinGW GCC 4.4 版或一段时间,并决定是时候升级了。我去了 MinGW 网站并下载了最新版本的 GCC (4.7.0)。

删除我以前的版本,安装最新版本后,即使是最简单的程序也会崩溃。例如,如果我编译这个程序

#include <iostream>

using namespace std;

int main () {
    cout << "Hello, World" << endl;

    return 0;
}

使用命令行

g++ hello.cpp -o hello.exe

它会打印出“Hello, World”然后崩溃。但是,如果我使用以下命令行编译它:

g++ -O3 hello.cpp -o hello.exe

它会运行得很好,根本不会崩溃。

现在,如果我改变输入程序,让它稍微复杂一点:

#include <iostream>
#include <string>

using namespace std;

int main () {
    string str;

    cout << "Enter a string: ";
    getline (cin, str);

    if (str == "foo")
        cout << "You entered foo!" << endl;
    else
        cout << "You entered: " << str;

    return 0;
}

如果没有优化选项(-O3),它会在打印出“输入字符串:”之前崩溃,但是,使用代码优化行,它会在输入字符串后崩溃。

现在,终于到了我的问题。我该怎么做才能解决这个问题,我是否只需恢复到以前版本的 GCC 才能使用它?另外,为什么 GCC 不能正确编译一个简单的程序?


更新:错误是由于GCC安装引起的,当使用MinGW安装程序安装时,选择“下载最新的存储库目录”选项,它会重现错误。但是,如果我使用相同的安装程序并选择“使用预打包的存储库目录”,则错误不再存在。因此,在 MinGW GCC 目录中列出的最新版本的二进制文件中存在一些错误。

最佳答案

我遇到过非常相似的问题,发布版本很好,调试版本被破坏了。解决方案是执行以下操作:

mingw-get update
mingw-get upgrade
mingw-get install gcc g++ mingw32-make --reinstall

这可能是双杀,但至少在“升级”无法删除一些以前的库时它甚至有所帮助。

关于c++ - 简单的程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11975941/

相关文章:

c++ - 函数重载,唯一变化是 "uint32_t"& uint64_t"在 c++ 的纯虚函数中

c++ - 将代码从 EEPROM 写入 char 数组

linux - 如何在 Linux 上使用 gcc 程序集在 x86-64 中设置控制寄存器 0 (cr0) 位

c - 从类型 'char[50]' 分配给类型 'char *' 时,类型不兼容

c++ - 是否可以捕获 std::call_once 中使用的函数的返回值?

c++ - 如何构建用于 Qt 的 C++ 库

c - __restrict vis-a-vis 流行编译器的函数优化行为

c++ - 奇怪的位操作导致 C++/反汇编?

swift - 使用 UITextField 时奇怪的卡住

objective-c - 无法执行操作,因为 childrenKeyPath 为 nil