是否可以"delete"分配"new[1]"的内存,反之亦然?

Is it ok to "delete" memory allocated with "new[1]" and vice-versa?

本文关键字:内存 反之亦然 delete 分配 new 是否      更新时间:2023-10-16

此代码合法吗?

int * a = new int[1];
delete a;

还是这个?

int * a = new int;
delete [] a;

显然,这似乎是不对的,至少应该劝阻,但它会导致任何实际问题(内存泄漏等等)吗?

匹配组合必须为:-

new; delete;

new[]; delete[];

如果你把这些混在一起,你会得到不明确的行为。我看到代码因此而爆炸。

否。如果你new,你应该delete。如果你new[],你应该delete[]

混合标量和数组(de)分配运算符会导致未定义的行为。delete和delete[]之间定义的区别在于,后者调用数组中所有元素的析构函数。

http://www.cplusplus.com/reference/new/operator%20delete[]/