delete
-
Hallo ich würde gerne wissen was passiert:
int i = 3; int* pi = &i; //jetzt sind wir absichtlich böse,könnte aber auch mal versehentlich vorkommen delete pi; pi= NULL;Wird der Speicher von i nun wider Willen freigegeben?
Welche Konsequenzen könnte so etwas auf lange Sicht haben?
-
shisha schrieb:
Hallo ich würde gerne wissen was passiert:
Klassisches Undefiniertes Verhalten: Es könnte eine Zugriffsverletzung auftreten, deine Festplatte formatiert werden [extrem weit hergeholt aber undefiniertes Verhalten ist halt undefiniert...]...
-
runtime-lib crasht wegen heap-corruption. oder wendu glück hast und delete
den aufruf ans OS weiterleitet passiert nichts außer nem (unsichtbarem) fehlercode
-
realist_P schrieb:
runtime-lib crasht wegen heap-corruption. oder wendu glück hast und delete
den aufruf ans OS weiterleitet passiert nichts außer nem (unsichtbarem) fehlercodeNein, wie asc schon sagte, ist das Verhalten hier schlicht undefiniert. Entsprechend sollte man sich nicht auf irgendetwas verlassen.
-
es ist aber das wahrscheinlichste. natürlich heißt undefiniert undefiniert,
aber es ist, wenn man die implementierung einigermaßen kennt, sehr wahrscheinlich!
dass das passiert
-
realist_P schrieb:
es ist aber das wahrscheinlichste. natürlich heißt undefiniert undefiniert,
aber es ist, wenn man die implementierung einigermaßen kennt, sehr wahrscheinlich!
dass das passiert1. Welche Implementierungen? Alle? Wohl kaum!
2. Was bringt es, wenn du von sowas ausgehst? Es ist undefiniert, daher unbedingt meiden.Grüssli
-
realist_P schrieb:
runtime-lib crasht wegen heap-corruption. oder wendu glück hast und delete
den aufruf ans OS weiterleitet passiert nichts außer nem (unsichtbarem) fehlercodeheap-corruption? Erläutern, da liegen alle Variablen aufm Stack (i, pi) wieso sollte der Heap Corrupt werden?
-
sdadasdasdasdasd schrieb:
heap-corruption? Erläutern, da liegen alle Variablen aufm Stack (i, pi) wieso sollte der Heap Corrupt werden?
Vielleicht ist der Heap eine Baumartige Liste (ein Heap!) der freien Speicherblöcke und dort wird der neue freue Speicherblock jetzt zugefügt. Im Heap ist ab jetzt ein Zeiger in den Stackspeicher, das wird später aua machen.