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.
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 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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With