3

Valgrind は、解放されていない関数 xxx に割り当てられたメモリを教えてくれます。罰金。ただし、追跡するのは通常よりも困難であることがわかっています。

この目的のために、私は数多くの作品を作成しました:

#ifdef DEBUG
fprintf(stderr, "something happening:%lx\n", (unsigned long)ptr);
#endif

したがって、表示されているこれらの ptr アドレスを、解放されていないメモリのアドレスと一致させる必要があります。

解放されていない各メモリ ブロックのアドレスを valgrind に教えてもらうにはどうすればよいですか?

4

2 に答える 2

1

残念ながら、Memcheck のリーク チェッカーがアドレスの印刷をサポートしているとは思えません。これは、複数の未割り当てブロックが類似している場合、それらを 1 つの「損失レポート」にマージする意思があるためです。

Memcheck をいじっても構わないのであれば、この機能は Valgrind ソースの memcheck/mc_leakcheck.c に追加できるはずです。帰宅したら様子を見て、詳しい場所を投稿します。

于 2009-10-08T21:17:56.210 に答える
1

コードの場所についてFalainaに感謝します。

valgrind-3.2.3 の場合、memcheck/mc_leakcheck.c の lc_scan_memory_WRK 関数でうまくいきました。

lc_markstack_push_WRK(addr, clique); の後にこれを追加しました。オンライン # 472

if (clique != -1) { VG_(printf)("clique %d: %p\n", clique, ptr); }

于 2010-03-26T16:59:59.837 に答える