当我运行以下代码时:
#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])
答案 0 :(得分:8)
删除后正在访问内存。这会调用未定义的行为。可能存在运行时错误,或者可能没有。
删除内存块意味着您承诺不再使用该指针。因此,系统可以自由地使用该存储器执行所需的操作。它可能会重复使用它。它最初可能无用。你答应不再使用指针,但后来打破了这个承诺。那时任何事情都可能发生。