2

プログラムを実行すると、Boehm GC(GC_DEBUGが定義されている)から次のエラーが発生します。

GC_check_heap_block: found smashed heap objects:
0x8ef1008 in or near object at 0x8ef1010(<smashed>, appr. sz = 29)
0x8ef1188 in or near object at 0x8ef1190(<smashed>, appr. sz = 29)
...

上記は約20回続きます。

奇妙なことに、私はプログラムに何も問題を見つけることができません、それはそれが想定されていることをし、そしてクラッシュしません。

プログラムをコンパイルしてGCを無効にすることができます。その後、valgrindを実行できますが、奇妙なことに、valgrindは問題を検出しません。

それはベームGC内の問題である可能性があります-私はそれを無視する必要がありますか?

これを効果的にデバッグする方法を誰かが知っていますか?

または、上記のメッセージが正確に何を意味するのかを誰かが説明できますか?

4

1 に答える 1

6

3ヶ月以上後に私自身の質問に答えるために...

すべてのポインターをファイルに記録し、破壊された警告を出したポインターと比較してみました。しかし、それはどこにもつながりませんでした。疑わしいポインタは、コードベース全体のさまざまな割り当てから来ていました(壊れている可能性のある特定の場所はありません)。

その間、GCがなければ、valgrindはエラーを報告しませんでしたが、もちろん、エラーがまだ存在する可能性がないという意味ではありません。

ただし、この特定のバージョンのGCに微妙なバグがある場合は試してみることにしました。私は最新の安定バージョンGC7.1を使用していました。7.2alpha4にアップグレードしたところ、問題は解決しました。

誰かがこれに遭遇した場合、うまくいけばこれが役立つでしょう。

于 2011-03-13T17:33:05.553 に答える