1

dmalloc バージョン 5.5.2 と glibc 2.17 を使用しようとしています。

dmalloc でリンクすると、常に segfault が発生します。

デバッグ中、役に立つデバッグ メッセージをフォーマットしたい場合、dmalloc が vsnprintf(...) を呼び出すことがわかりました。残念ながら、vsnprintf(..) 自体が free() を呼び出すため、セグメンテーション違反の理由は再帰です。free() は vsnprintf() を呼び出し、vsnprintf() は free() などを呼び出し、巨大なスタック トレースで segfault するまで続きます。

HAVE_VSNPRINTF と HAVE_VPRINTF を未定義にすることでこれをすばやく修正できますが、デバッグ メッセージに重要な情報がありません。

メモリを割り当てない vsnprintf(...) の古い実装を使用して、この問題に対する独自の解決策をハックしましたが、まだ良い解決策がないとは信じがたいです。

この問題を dmalloc で解決する標準的な方法はありますか?

4

1 に答える 1

2

問題のある呼び出しが null 引数を持つ役に立たないものであることがわかったので、最も簡単な回避策はif (!p) return;の先頭に を追加することdmallocのようfreeです。

于 2014-08-29T18:23:12.637 に答える