3 Stimmen

Verhalten von delete[]

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?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X