Zum Inhalt springen

wann "verschwindet" ein rückgabewert


Empfohlene Beiträge

Geschrieben

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);

}

Geschrieben

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.

Geschrieben

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?

Geschrieben
ein >>bildliches<< beispiel
Dieses 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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...