Bitte seht euch folgenden Code an:
Code: Alles auswählen
#include <iostream>
#include <string>
std::string getMessage()
{
std::string msg("Is there anybody out there?");
}
int main()
{
std::string message(getMessage());
std::cout<<message<<'\n';
return 0;
}
Tja, wenn man den Code durch den Compiler schickt, gibt erstmal ne Überraschung: der Compiler gibt keine Fehler aus, und kompiliert das Programm.
Wenn man das Programm aufruft gibts dann eine Endlosschleife (zumindest bei mir, bei vielen gibts wahrscheinlich einen Segmentation Fault.), und es lässt sich nur durch CTRL- C beenden.
Kann mir jemand sagen was da los ist? Offensichtlich holt sich der Konstruktur von std::string (erste Zeile in main() ) fröhlich seinen String vom Stack ab, nachdem er den Aufruf nach getMessage() getätigt hat. getMessage() hat dort aber nichts abgelegt, also ist der Inhalt dieses Strings undefiniert, und so verursacht auch der Konstruktoraufruf undefiniertes verhalten.
Aber wieso in aller Welt gibt es da keinen Fehler? Ist das ein Compilerproblem? Irgendwie entzieht sich das meiner Weisheit.
Verwendete Compiler: gcc-4.3, gcc-4.4 aus SVN, beide male das gleiche ergebnis.
Ich bitte um Hilfe, mein Welt (C++) Bild wieder zurechtzurücken.