Seltsames Verhalten vom Programm?
-
Hallo ich war gerade am schreiben und irgendwie bin ich wohl auf die Taste fürs Compilieren gekommen.
Hier gibt mir jetzt das Programm den Pfad aus wo es gespeichert ist, gibts dafür eine Erklärung?^^
bzw. wenn ich schreiben: string str dann wird gar nichts ausgeben.
Ist das vielleicht nur Zufall das der mir diesen Pfad ausgibt?
Ich meine der Rohstring char *str ist hier ja nicht mit 0 initialisiert.Ich tippe mal auf Undefiniertes Verhalten liegen ich mit meiner Vermutung richtig?
#include <iostream> using namespace std; class win { public: char* str; int len; win::win (); ~win(); }; win::win () { } win :: ~win() { } void print() { win s; cout<<s.str<<endl; } int main() { win s; print(); system("PAUSE"); }
-
schrieb:Ich tippe mal auf Undefiniertes Verhalten liegen ich mit meiner Vermutung richtig?
Ja.
Ich meine der Rohstring char *str ist hier ja nicht mit 0 initialisiert.
Ja.
Ist das vielleicht nur Zufall das der mir diesen Pfad ausgibt?
Jain. Ist halt undefiniertes Verhalten. Es ist jedoch erklärbar, wenn man sich ein bisschen mit dem auskennt, was im Hintergrund geschieht, warum gerade dies ausgegeben wird. str hat den Wert, der zuletzt an der Speicherstelle stand. Da zuletzt der Aufruf von main stattfand, steht dort noch eines der Argumente von main, welches ein Zeiger auf eine Zeichenkette ist, welche den aufrufenden Befehl enthält. Da darf man sich natürlich nicht drauf verlassen und bei der kleinsten Änderung oder den kleinsten Compileroptimierungen fliegt dir das auseinander!
Dein Programm macht übrigens für den Start keinen guten Eindruck. std::string? Stopf manuelle Speicherverwaltung und C-Strings in den Müll, zusammen mit dem Lehrbuch, welches dir das beigebracht hat.
-
Ich war dabei sowas wie einen Vector nachzubauen in meinem Buch steht das zwar genau erklärt wie man da vorgehen soll aber ich wollte auch selbst mal rumprobieren. Naja und dabei habe ich diese Entdeckung gemacht.^^