0

私は C++ から始めて、memcheck を使用してプログラムのメモリ リークをチェックしています。

(いつ...)リークがある場合、解放されていない などを使用する出力を取得しますUnfreed memory allocations remaining。これらには通常、ソース ファイルと割り当ての行番号が付随しているため、簡単に修正できます。newmalloc

ソースモジュールが としてリストされている場合もありますが、私の場合unknown line:0は への呼び出しnewです。memcheck が呼び出しが行われたことを認識しnewている場合、これがどこから来たのかがわからないのはなぜですか? 私はこれを回避しようとしているだけなので、これらのリークがどこから来ているのか、いくつかのアイデアを得ることができます.

4

1 に答える 1

0

スタックトレースを正しく解決できなかっただけだと思います。このようなツール (VLD、Deleaker など) では、高速モードでスタック トレースを解決しようとして (x86 で EBP/ESP を読み取るなど)、フレーム ポインターが見つからない場合、またはデバッグ情報を使用してスタック トレースを解決しようとしたときに発生します。情報が間違っているか、単に存在しない。

ほとんどの場合、スタック トレースは正しく解決できます。時々-そうではありません。

于 2015-09-23T08:51:43.573 に答える