在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% 确定数组释放函数是什么,但我认为这不会导致内存泄漏?
【问题讨论】:
这是未定义的行为。 这个特定测试中的一个缺陷是 - 在某些编译器上 -delete
和 delete[]
恰好为 int
s 生成相同的代码,但为带有析构函数的类类型生成不同的代码。很难测试 UB。
【参考方案1】:
为使用new
分配的指针运行delete []
是undefined behavior。它可能会工作,也可能不会,或者可能随时停止工作,或者可能会破坏您的硬件。你没有保证。
【讨论】:
以上是关于在c ++中对非数组变量使用delete [] [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Google Chart和Chart.Js,在Asp .NET Core 2.2中将脚本端发送C#变量