Mögliches Duplikat:
C++ delete - Es löscht meine Objekte, aber ich kann immer noch auf die Daten zugreifen?
Ich bin neugierig, warum ich das folgende Verhalten mit dem folgenden (eher erfundenen) Code erhalte. Ich verwende gcc 4.4.5 auf Ubuntu 10.10
#include <iostream>
int main(int argc, char *argv[])
{
int N = 5;
int *myarr = new int[N];//create an integer array of size 5
for (int i = 0; i < N; ++i)
{
myarr[i] = 45;
std::cout << myarr[i] << std::endl;
}
delete[] myarr;//kill the memory allocated by new
std::cout << "Let's see if the array was deleted and if we get a segfault \n" ;
for (int i = 0; i < N; ++i)
{
std::cout << myarr[i] << std::endl;
}
return 0;
}
Der Code kompiliert auch mit -Wall
Flagge an. Die Ausgabe lautet
Desktop: ./a.out
45
45
45
45
45
Let's see if the array was deleted and if we get a segfault
0
0
45
45
45
Desktop:
Wie kommt es, dass die myarr
Array immer noch so zugreifen kann, als ob es jemals gelöscht worden wäre, ohne dass ein Segfault auftritt? Auch wenn die myarr
Array gelöscht wurde, wie kommt es dann, dass die Werte 45 an den Positionen 2, 3 und 4 immer noch korrekt gedruckt werden?
Kurz gesagt, was ist delete[]
wirklich hier machen?