在c ++中对非数组变量使用delete [] [重复]

Posted

技术标签:

【中文标题】在c ++中对非数组变量使用delete [] [重复]【英文标题】:using delete[] on non-array variable in c++ [duplicate] 【发布时间】:2018-09-08 15:12:51 【问题描述】:

这听起来可能有点奇怪,但如果我有代码使用 delete [] 如下:

int main()

    int *test = new int(5);
    delete [] test //Does this work?
    // delete test (This is the standard syntax)

当然,我尝试编译运行,delete [] 没有返回任何错误。根据http://www.cplusplus.com/reference/new/operator%20delete[]/,delete[] 运算符首先为数组中的每个元素调用适当的析构函数(如果这些是类类型),然后调用数组释放函数。我不是 100% 确定数组释放函数是什么,但我认为这不会导致内存泄漏?

【问题讨论】:

这是未定义的行为。 这个特定测试中的一个缺陷是 - 在某些编译器上 - deletedelete[] 恰好为 ints 生成相同的代码,但为带有析构函数的类类型生成不同的代码。很难测试 UB。 【参考方案1】:

为使用new 分配的指针运行delete [] 是undefined behavior。它可能会工作,也可能不会,或者可能随时停止工作,或者可能会破坏您的硬件。你没有保证。

【讨论】:

以上是关于在c ++中对非数组变量使用delete [] [重复]的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在线程中对非托管函数执行C#回调?

Google Chart和Chart.Js,在Asp .NET Core 2.2中将脚本端发送C#变量

在 C 中对指向对象的指针使用方法

如何在C中对指向char的指针数组进行qsort?

如何在 PHP/Eclipse 中对 foreach 循环中从数组中拉出的自定义对象进行智能感知?

C++11重点语法