C++ 操作员delete[]做什么? #包括 使用名称空间std; 甲级{ 公众: int-s; //~A(){} }; int main(){ A*c=新的A[10]; 删除c; 返回0; }

C++ 操作员delete[]做什么? #包括 使用名称空间std; 甲级{ 公众: int-s; //~A(){} }; int main(){ A*c=新的A[10]; 删除c; 返回0; },c++,memory,C++,Memory,上面的代码可以成功运行,但当我运行代码时会出现错误。谁能告诉我原因?您的代码行为未定义 您必须写入删除[]c如果c是指向用new[]分配的内存的指针 (有趣的是,有些编译器会为您解决这些麻烦,但不要依赖于这些,因为您没有编写可移植C++)。谢谢。我知道你的意思。但是为什么我在为类a添加析构函数时出错呢?我很困惑,这就是未定义行为的本质。任何事情都有可能发生。顺便说一下,如果我A*A=newa[10]得到一个数组。g++是否将a的长度放入(int*)a-1?就像其他编译器一样。我认为它可能会将长度

上面的代码可以成功运行,但当我运行代码时会出现错误。谁能告诉我原因?

您的代码行为未定义

必须写入
删除[]c如果
c
是指向用
new[]
分配的内存的指针


(有趣的是,有些编译器会为您解决这些麻烦,但不要依赖于这些,因为您没有编写可移植C++)。

谢谢。我知道你的意思。但是为什么我在为类a添加析构函数时出错呢?我很困惑,这就是未定义行为的本质。任何事情都有可能发生。顺便说一下,如果我
A*A=newa[10]
得到一个数组。g++是否将a的长度放入
(int*)a-1
?就像其他编译器一样。我认为它可能会将长度设置为
(size\t*)a-1
,但我不确定。
#include <iostream>
using namespace std;
class A{
  public:
    int s;
    // ~A(){}
};

int main(){
  A *c = new A[10];  

  delete c;
  return 0;
}