Mögliche Duplikate:
Zeiger auf lokale Variable
Kann auf den Speicher einer lokalen Variablen außerhalb ihres Gültigkeitsbereichs zugegriffen werden?
Ich habe ein interessantes Problem. Ich habe eine Lese-Funktion, die einen Zeiger zurückgibt:
char * myReadFunc() {
char r [10];
//Einige Code, der Daten in r liest.
return r;
}
Jetzt rufe ich diese Funktion auf, um Informationen einigen Variablen zuzuweisen, die ich habe:
char * s;
//Einige Code, um anzugeben, von wo aus gelesen werden soll.
s = myReadFunc();
Das liefert Ergebnisse, wie ich es beabsichtigt habe.
Wenn ich jedoch Folgendes mache:
char * s1;
char * s2;
//Einige Code, um anzugeben, von wo aus gelesen werden soll.
s1 = myReadFunc();
//Einige Code, um den Leseort zu ändern.
s2 = myReadFunc();
Erhalte ich einige seltsame Ergebnisse. Die Daten sind identisch für beide, und sie stammen IMMER vom zweiten angegebenen Leseort.
Also habe ich einige alternative Codes ausprobiert:
char * s1;
char * s2;
//Einige Code, um anzugeben, von wo aus gelesen werden soll.
char r [10];
//Einige Code, der Daten in r liest. IDENTISCH zu myReadFunc().
s1 = r;
//Einige Code, um den Leseort zu ändern.
s2 = myReadFunc();
Dieser Code liefert Ergebnisse, wie ich es beabsichtigt habe (s1
enthält Daten aus einem Ort und s2
enthält Daten aus einem anderen).
Also ist meine Frage, warum hat der letzte Code funktioniert, aber der obige Code nicht? Meine Vermutung ist, dass meine Funktion irgendwie beiden Variablen zugeordnet war und da sie auf beide zeigte, sie bei jedem Aufruf beide neu zugewiesen hat. Versteht jemand den genauen Grund für dieses Verhalten?