Sie greifen auf den Speicher zu, nachdem Sie ihn freigegeben haben. Das ist undefiniert. "Undefined" bedeutet nicht, dass das Programm abstürzt, oder dass verschiedene Dinge in verschiedenen Läufen passieren. Es bedeutet lediglich, dass alles passieren könnte.
Leider, wenn Sie den Speicher zugreifen, der gerade freigegeben hat, in der Regel nichts Schlimmes passieren wird. Dies ist genau das Verhalten, das Sie sehen. Ich vermute, dass das gleiche in MSVC im Debug-Modus versuchen wird, in der Tat, geben Sie ein anderes Ergebnis, da es einige Modi hat, in denen es den Inhalt des dynamischen Speichers zerstört, sobald es freigegeben wird.
Auf Linux, versuchen Sie Valgrind (nachschlagen) oder die Adresse Sanitizer (Kompilieren mit -sanitize = Adresse). Beide fangen diese Art von Fehlern ein.
Das Verhalten ist nicht definiert. –