sup*_*tty -1 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]) << " ";
}
Run Code Online (Sandbox Code Playgroud)
结果是:
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
Run Code Online (Sandbox Code Playgroud)
所以,问题是,这delete[]不是删除整个数组.如果我创建一个int数组,删除的插槽数是2.我在Arch Linux下使用g ++/gcc 4.9.
这是什么原因,我将如何解决它?
顺便说一下:'删除'数组中'0'的数量似乎相当于:
sizeof(TestArray)/sizeof(TestArray[0])
Run Code Online (Sandbox Code Playgroud)
删除后即可访问内存.这会调用未定义的行为.可能存在运行时错误,或者可能没有.
删除内存块意味着您承诺不再使用该指针.因此,系统可以自由地使用该存储器执行所需的操作.它可能会重复使用它.它最初可能无用.你答应不再使用指针,但后来打破了这个承诺.那时任何事情都可能发生.