Valgrind声称我在使用malloc时使用了new



在现有的代码库上运行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;
}

相关内容

  • 没有找到相关文章

最新更新