hackmack hat geschrieben:Wenn ich das Programm jetzt ausführe, kommt beim compilieren (eigentlich erwartungsgemäß) kein Fehler, aber auch beim Ausführen nicht, sondern er zeigt mir die Zahl 1254 an, so wie ich sie in izahl gespeichert habe. Ist es nicht eigentlich nicht so, dass nachdem eine Funktion fertig ist, alle ihre lokalen Variablen vernichtet werden? Oder ist es nur so, dass die Werte der Variablen trotzdem noch im Speicher bleiben, sie nur nicht mehr über ihren Namen erreichbar sind?
Das "Vernichten" der Variablen würde ja Arbeit bedeuten, also das Programm verlangsamen. Verstehe Vernichten hier nicht als aktiven Prozess der bewußten Zerstörung. Schreib Dir eine dritte Funktion mit 10 Integer-Argumenten, ruf die nach cout << *iptr nochmal auf, in dem Du die Argumente durchnummerierst und guck, was dann rauskommt.
hackmack hat geschrieben:Folgender Code funktioniert aber wieder wie ich es mir vorgestellt habe (sprich: es wird nur 0 angezeigt, und nicht 125)
Code: Alles auswählen
int *izahl = new int(125);
zweiteFunc(*izahl);
delete izahl;
Liegt das daran, dass ich hier izahl selbst auf dem Heap angelegt habe und auch wieder selbst gelöscht?
Auch hier gibt es kein gesichertes Verhalten. Die Variable liegt auf dem Heap, was in der Zwischenzeit damit passiert, weiß kein Mensch. Du kannst den Heap allerdings nicht so kontrolliert überschreiben, wie den Stack. Wenn Du nochmal Speicher anforderst, kann die Variable wieder da sein, oder was ganz anderes - je nachdem, wo Du im physikalischen Speicher Deinen Speicher vom OS zugewiesen bekommst.
Beide Codes sind semantisch falsch, was ein C-Compiler aber nicht so tiefgehend prüft oder prüfen kann. Beide Codes erzeugen nicht definierte Ergebnisse.
hackmack hat geschrieben:Wie ist das dann genau mit dem freigeben? Ist das immer so, egal ob ich es selbst mit delete oder der Compiler automatisch macht?
Speicher auf dem Stack gibst Du nicht das OS zurück. Du verwendest ihn wieder.
delete gibt Speicher an das OS zurück, damit andere Programme ihn verwenden können.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.