C ++数组:为什么delete []不起作用?

时间:2014-05-04 20:53:27

标签: c++ arrays delete-operator

当我运行以下代码时:

#include <iostream>
using namespace std;

main(){
  //declare:
    char* TestArray = new char[16];
    for(char i=0; i<16; i++){
            TestArray[i]=rand() % 10;
    }
  //output Array:
    for(char i=0; i<16; i++){
            cout << int(TestArray[i]) << " ";
    }
  //delete it:
    delete[] TestArray;
  //output result:
    for(char i=0; i<16; i++){
            cout << int(TestArray[i]) << " ";
    }

结果是:

3 6 7 5 3 5 6 2 9 1 2 7 0 9 3 6 //declared Array
0 0 0 0 0 0 0 0 9 1 2 7 0 9 3 6 //'deleted' Array

所以,问题是,delete[]没有删除整个数组。如果我创建一个int数组,删除的插槽数是2.我在Arch Linux下使用g ++ / gcc 4.9。

这是什么原因以及如何解决?

顺便说一句:&#39; 0&#39; 0&#39; 0&#39; 0&#39; 0数组似乎等同于:

sizeof(TestArray)/sizeof(TestArray[0])

1 个答案:

答案 0 :(得分:8)

删除后正在访问内存。这会调用未定义的行为。可能存在运行时错误,或者可能没有。

删除内存块意味着您承诺不再使用该指针。因此,系统可以自由地使用该存储器执行所需的操作。它可能会重复使用它。它最初可能无用。你答应不再使用指针,但后来打破了这个承诺。那时任何事情都可能发生。