Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Simple program crashes

Tags:

c++

gcc

g++

crash

So I've been using MinGW GCC version 4.4 or a while, and decided it's time to upgrade. I went to the MinGW website and downloaded the latest version of GCC (4.7.0).

After deleting my previous version, and installing the newest version, even the simplest program will crash. For example, if I compile this program

#include <iostream>

using namespace std;

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

    return 0;
}

with the command line

g++ hello.cpp -o hello.exe

It will print out "Hello, World" and then crash. However, if I compile it with the following command line:

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

It will run perfectly fine, without crashing at all.

Now, if I change the input program, and make it slightly more complicated:

#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;
}

Without the optimization option (-O3), it will crash before printing out "Enter a string: ", however, with the code optimization line, it crashes after entering a string.

Now, finally to my question. What can I do to fix this, will I simply have to revert to a previous version of GCC in order to use it? Also, why would GCC not be compiling a simple program correctly?


Update: The error was caused by the GCC installation, when installing with the MinGW installer, and choosing the option to "Download latest repository catalogues", it would reproduce the error. However, if I used the same installer and chose "Use pre-packaged repository catalogues", then the error no longer exists. So there is some error in the latest version of the binaries listed in the MinGW GCC catalogues.

like image 837
Alex Avatar asked Aug 15 '12 19:08

Alex


People also ask

What causes a program to crash?

Typical causes include accessing invalid memory addresses, incorrect address values in the program counter, buffer overflow, overwriting a portion of the affected program code due to an earlier bug, executing invalid machine instructions (an illegal opcode), or triggering an unhandled exception.

What is a crash in programming?

What Does Crash Mean? A crash, in the context of computing, is an event wherein the operating system or a computer application stops functioning properly. It mostly occurs when: Hardware has failed in a non-recoverable fashion. Operating system data have become corrupted.

What happens when your program crashes?

When a program crashes, something unexpected has happened which the program itself is not equipped to handle; when the operating system detects such an event, it (usually) terminates the program.


1 Answers

I've ran into very similar problem, where a release build was fine and a debug build was broken. The solution was to perorm the following:

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

This might have been a double-kill, but at least it even helped when "upgrade" could not remove some previous libraries.

like image 122
Lyth Avatar answered Oct 04 '22 16:10

Lyth