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

    Nein, 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


  • Administrator

    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 passiert

    1. 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) fehlercode

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


Anmelden zum Antworten