c++ Array:为什么delete[]不起作用?

C++ Array: why is delete[] not working?

本文关键字:不起作用 delete Array 为什么 c++      更新时间:2023-10-16

当我运行以下代码时:

#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。

这是什么原因,我将如何能够解决它?

顺便说一下:'deleted'数组中'0'的数目似乎相当于:

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

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

删除内存块意味着你承诺不再使用该指针。因此,系统可以自由地使用内存做任何它想做的事情。它可能会重复使用它。它可能一开始什么都不做。你答应过不再用教鞭,但后来又食言了。那时候什么事都有可能发生。