0

マルチスレッド環境で次の C++ コードを実行しています。

A* a = (A*) (_x->b); a->DoStuff();

Aは具体的なクラスで_xあり、のメンバーでありA( type としましょうX*)、bですvoid *

さらに、thisも でありA*、メモリの場所は異なりますが、ダンプが示すものと同様のデータが にあり_x->bます。

逆参照で不可解なクラッシュが発生しています。生成されたダンプ ファイルは非常に詳細で、_x良好な状態にあり、_x->bゼロ以外の有効なメモリ アドレスを指していることがわかります。ダンプは、2 番目のステートメントでaが 0 であることも示しています。これが、最初にクラッシュが発生した理由です。

私の質問: このクラッシュの原因は明確なヒープの破損ですか、それとももっと根本的なものでしょうか? gflags や valgrind などのヒープ トラッキング ツールを使用してこれをデバッグする予定ですが、C スタイルのキャストの後に一見有効なポインターが何らかの形で null になる理由が他にないかどうか興味がありました。

4

0 に答える 0