Kurze Frage zu Variablen gültigkeit
-
Hallo ich habe mir gerade mal über folgendes gedanken gemacht:
Angenommen man hätte solch einen Code:
void* Funktion() { void *ret = IrgendEineFunktion(); return ret; }
So etwas erzeugt doch undefiniertes Verhalten weil return die Adresse auf einen Pointer zurückgibt der nicht mehr gültig ist.
Ist das richtig was ich da sage?^^
-
ipcT schrieb:
So etwas erzeugt doch undefiniertes Verhalten weil return die Adresse auf einen Pointer zurückgibt der nicht mehr gültig ist.
Ist das richtig was ich da sage?^^
nein. Du gibst nicht die Adresse eines Pointers zurück, sondern eine Kopie des Pointers. Das ist völlig legal.
Das von dir beschriebene UB wäre sowas:
void** DoSomething() { void* ret = Irgendwas(); return &ret; // Adresse des Pointers zurückgeben }
-
In deinem Beispiel kommt es halt darauf an, worauf die Rückgabe von
IrgendEineFunktion
zeigt. Wenn die auf lokalen, nicht mehr gültigen Speicher zeigt, hast du natürlich verloren. Aber so, wie das Beispiel da steht, ist es erst mal ok.
-
daddy_felix schrieb:
nein. Du gibst nicht die Adresse eines Pointers zurück, sondern eine Kopie des Pointers.
Ich glaub jetzt hab ich es verstanden, ich hatte mich auch irgendwann mal gewundert warum so etwas nicht UB ist:
int funktion() { int var=9; return var; }
UB wäre hier ja nur wenn ich return &var; schreiben würde.
Also kann man sagen das hier eine Kopie von var erstellt wird und das der Speicher der Originalen Variable var wieder freigeben wird und dadurch wieder verwendet werden kann.:xmas1: :xmas2: