是否可以“删除”分配了“new [1]”的内存,反之亦然?

时间:2014-10-16 12:30:08

标签: c++ c++11 memory new-operator delete-operator

这段代码合法吗?

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

还是这个?

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

显然,这似乎并不正确,至少应该气馁,但会不会引起任何实际问题(内存泄漏等等)?

3 个答案:

答案 0 :(得分:5)

匹配组合必须: -

new; delete;

new[]; delete[];

如果你混淆这些,你会得到未定义的行为。由于这个原因,我看到代码爆炸了。

答案 1 :(得分:0)

没有。如果您new,则应delete。如果你new[],你应该delete[]

答案 2 :(得分:0)

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

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