我正在写一个内存泄漏检测器,它会创建一个带有一些警告的文本文件。例如,它会在使用delete
而不是delete[]
时生成警告,以释放使用new[]
分配的内存。
在使用delete[]
创建的对象上使用new
时,我发现难以解决的问题相同。在这种情况下,析构函数会被调用许多从未构造过的对象。
这里有来自c ++参考的东西:
... delete []是一个具有非常特定行为的运算符:表达式 使用delete []运算符,首先调用相应的析构函数 对于数组中的每个元素(如果它们是类类型)...
我的问题是,我能为此做些什么吗?为析构函数调用实际上未创建的对象通常会导致段错误。我想以某种方式"赶上"它,取消删除数组并创建警告。
编辑:似乎我无能为力。检查了另一块电路板并得到了使用内存分配器的建议,这对我的内存泄漏检测器来说太过分了,并且/或者看看valgrind是如何运行的。我可能会做后者。答案 0 :(得分:1)
您可能无法执行任何操作,因为如果客户端代码调用delete
,当运算符new为new []
时,您可能不会在删除运算符中收到相同的地址。