Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

}

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.

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?

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.

ok danke!

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.