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); }
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.
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?
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.
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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden