2

Valgrind を既存のコードベースに対して実行すると、多くの「Mismatched free / delete/delete[]」エラーが発生します。それらの多くは 1 つの問題の繰り返しです: 行 XXX でdelete操作が使用されているのに対し、行 YYY でmalloc操作が使用されていると主張しています。ただし、問題のあるファイルを開いて、指定された行番号に移動すると、メモリが割り当てられていないことがわかりmallocますnew. 割り当てられたオブジェクトは標準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 に答える