是c++;删除[]适用于基元类型 在C++中,如果我有一个动态分配的原始类型数组,那么是否需要使用Dele[]来防止内存泄漏? 比如说, char * x = new char[100]; delete x; // is it required to call delete [] x? struct A { ... }; A *p = new A[30]; delete [] p; // delete p would cause memory leakage

是c++;删除[]适用于基元类型 在C++中,如果我有一个动态分配的原始类型数组,那么是否需要使用Dele[]来防止内存泄漏? 比如说, char * x = new char[100]; delete x; // is it required to call delete [] x? struct A { ... }; A *p = new A[30]; delete [] p; // delete p would cause memory leakage,c++,memory-leaks,new-operator,dynamic-memory-allocation,delete-operator,C++,Memory Leaks,New Operator,Dynamic Memory Allocation,Delete Operator,请评论。当您使用新运算符的数组形式时,您必须使用删除运算符的数组形式 char * x = new char[100]; delete [] x; char * y = new char; delete y; 一起使用的new和delete的形式不取决于开始分配和取消分配的对象的类型 如果你使用 A *p = new A[30]; delete [] p; 该程序受未定义行为的约束。它可能会导致内存泄漏并继续运行,但也可能会崩溃。是。delete[]操作符只是告诉编译器删除数组的所有元素,

请评论。

当您使用
运算符的数组形式时,您必须使用
删除
运算符的数组形式

char * x = new char[100];
delete [] x;

char * y = new char;
delete y;
一起使用的
new
delete
的形式不取决于开始分配和取消分配的对象的类型

如果你使用

A *p = new A[30];
delete [] p;

该程序受未定义行为的约束。它可能会导致内存泄漏并继续运行,但也可能会崩溃。

是。delete[]操作符只是告诉编译器删除数组的所有元素,而不仅仅是第一个元素。这适用于所有类型,整型和非整型。

是的,因为语言需要它


当数组是标量类型时,如果您不小心使用了
delete
而不是
delete[]
,那么您的程序很可能仍然可以工作。但是它仍然是未定义的行为---标准不能保证它能工作,下一版本的编译器可能会破坏你的程序。

如果你通过
newt[n]
分配内存,那么你必须通过
delete[]
删除它

参考问题。

第一个表达式用于分配内存,以包含
T
类型的单个元素。第二个用于分配
T
类型的元素块(数组),其中元素的数量是表示这些元素数量的整数值。例如:

1.  int * foo;
2.  foo = new int [5]; 
在下面的语句中,第一个语句释放使用new分配的单个元素的内存,第二个语句释放使用new和括号中的大小([])分配给元素数组的内存


运算符
delete
的形式必须与运算符
new
的形式相对应。因此,必须使用
delete[]x
释放分配了
AnyType*x=newanytype[n]
的数组。以任何其他方式释放(如
delete x
)会产生未定义的行为。对于任何类型-基本类型或非基本类型。

如果我使用delete而不是delete[],是否意味着对于基本类型。会有内存泄漏吗?你能参考一些文档/链接RO检测到吗?@ D.DasBasijaa.文档是C++标准。这就是未定义行为的美妙之处。标准基本上是说“在我们告诉你不要这样做后再这样做是个坏主意,我们不会浪费时间来定义会发生什么。”也许你会被泄露。也许你不会。也许程序会崩溃。也许它会在一个随机文件上写一个1和0的随机模式。你不知道。我们不知道。行为未定义。“为基元类型动态分配数组”不要。使用std::vector。
1.  int * foo;
2.  foo = new int [5]; 
1. delete pointer;
2. delete[] pointer;