thundermare Geschrieben 5. September 2006 Geschrieben 5. September 2006 hallo, ich habe eine frage zu dem thema wann eine Variable gelöscht wird wenn sie aus einer funktion zurück gegebenwird. z.B. Bsp. 1 sollte problemlos gehen int foo(int i) { i++; return i; } void main() { int b = 0; b = foo(12); cout<<b; } Bsp. 2 gebe ich jetzt nicht eine adresse zurück die eigentlich wieder überschrieben sein könnte char foo(char wort[]) { return wort; //ich weiss das ich diese adresse nicht zurück geben muss } //dient nur als beispiel!!! void main() { char wort = "Hallo"; cout<<foo(wort); } Bsp. 3 ist das jetzt das selbe wie bei bsp. 2? Obj foo(Obj obj) { return obj; } void main() { Obj obj; cout<<foo(obj); } Zitieren
Guybrush Threepwood Geschrieben 5. September 2006 Geschrieben 5. September 2006 Also was mit der Funktion auf dem Stack erzeugt wurde wird auch mit dem Beenden der Funktion wieder entfernt bzw. freigegeben. Bei deinem 2. Beispiel (mal abgesehen davon das es falsch ist) hast du den String ja nicht in der Funktion angelegt sondern nur durchgeschleift. Wenn du allerdings in einer Funktion etwas auf dem Heap anlegst (also mit malloc oder new usw.) dann bleibt das natürlich solange bestehen bis du es wieder mit free oder delete freigibst. Zitieren
thundermare Geschrieben 5. September 2006 Autor Geschrieben 5. September 2006 ich glaube @threepwood du hast die frage nicht verstanden, mir geht es darum zu wissen ob der speicherbereich für eine variable überschrieben werden kann nachdem die funktion beendet wurde und der zuweisung/ausgabe in der main funktion? ein >>bildliches<< beispiel char foo() { char wort[] = "hallo"; return wort } void main() { cout<<foo(); //gibt die adresse auf eine variable zurück //deren speicherbereich bereits wieder freigegeben ist und //schon wieder überschrieben sein könnte? } //gilt das selbe für mein beispiel 1 und 3? Zitieren
Klotzkopp Geschrieben 5. September 2006 Geschrieben 5. September 2006 ein >>bildliches<< beispielDieses Beispiel ist kein gültiges C++. Es gibt keine implizite Konvertierung von char[] nach char. Generell ist es ein Fehler, Zeiger oder Referenzen auf lokale Variablen zurückzugeben. Das tut aber keines deiner Beispiele. Die Rückgabewerte von von Funktionen - wenn es sich nicht um Referenzen handelt - sind temporäre Objekte. Wenn du sie in einem Ausdruck benutzt, leben sie, bis der Ausdruck ausgewertet wurde. Zitieren
Guybrush Threepwood Geschrieben 5. September 2006 Geschrieben 5. September 2006 ich glaube @threepwood du hast die frage nicht verstanden, ich glaub eher du hast meine antwort nicht verstanden Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.