マルチスレッド環境で次の 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 になる理由が他にないかどうか興味がありました。