在现有的代码库上运行Valgrind时,我收到了很多"不匹配的free/delete/delete[]"错误。其中许多都是一个问题的重复:它声称在XXX行使用了delete
运算,而在YYY行使用了malloc
运算。然而,当我打开它抱怨的文件并导航到指示的行号时,我发现内存不是用malloc
分配的,而是用new
分配的。分配的对象是标准的ifstream
,并且既没有使用new[]
也没有使用delete[]
。
我正在运行Valgrind 3.5。有人知道发生了什么吗?我看不出这怎么会是一个真正的错误,但我看到一些人声称Valgrind不会出现很多假阳性,所以在抑制它之前,我想对这是假的有一些信心。
您没有提供示例程序,所以这只是一个水晶球猜测。
您的程序提供了operator new
,但缺少operator delete
。下面的示例程序会产生与您所看到的相同的错误消息:
#include <new>
#include <cstdlib>
/*
* Sample program that provides `operator new`, but not `operator delete`.
*/
// minimal version of new for demonstration purpose only
void* operator new(size_t numBytes) {
return malloc(numBytes);
}
int main () {
int *p = new int;
delete p;
}