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

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)

Dav*_*nan 8

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

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