質問
プログラムのコアダンプの1つをデバッグしながら、多型であるオブジェクトが含まれているシナリオに出会いました。
オブジェクトがVPTRを失ったときのシナリオは何でしょうか。
事前に、ブリジェシュ
解決
記憶は破壊されています。つまり、何かが記憶を上書きしました。
Deleteを呼び出すか、Destructorを直接呼び出すことで破壊しました。これは通常、VPTRをnulえないので、ベースクラスのVtableを指し示すことになりますが、実装に依存します。
ほとんどの場合、ケース1。メモリブレークポイントを備えたデバッガーがあり、問題を確実に再現できる場合は、VPTRにメモリブレークポイントを設定して、それを変更しているものを確認します。
他のヒント
おそらく何かがオブジェクト全体を上書きしました。このようなもの:
memset( object, 0, sizeof( *object ) );
VPTRを持つオブジェクトで使用されるまで、これは問題ありません。
オブジェクトのデストラクタ中にVテーブルを使用しようとしている可能性があります。 Vテーブルは現時点では利用できません。
所属していません StackOverflow