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.

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...