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;
}