2

针对现有代码库运行 Valgrind,我收到很多“不匹配的免费/删除/删除 []”错误。其中许多是一个问题的重复:它声称在第 XXX 行使用了一个delete操作,而在 YYY 行malloc使用了一个操作。但是,当我打开它抱怨的文件并导航到指示的行号时,我发现内存不是mallocnew. 分配的对象是一个标准ifstream,既没有new[]也没有delete[]被使用。

我正在运行 Valgrind 3.5。有谁知道发生了什么?我看不出这怎么可能是一个真正的错误,但我看到有些人声称 Valgrind 不会出现很多误报,所以我想在压制它之前确信这是假的。

4

1 回答 1

3

您没有提供示例程序,所以这是一个水晶球猜测。

您的程序提供了一个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;
}
于 2012-07-09T21:08:24.940 回答