質問

プログラムのコアダンプの1つをデバッグしながら、多型であるオブジェクトが含まれているシナリオに出会いました。

オブジェクトがVPTRを失ったときのシナリオは何でしょうか。

事前に、ブリジェシュ

役に立ちましたか?

解決

  1. 記憶は破壊されています。つまり、何かが記憶を上書きしました。

  2. Deleteを呼び出すか、Destructorを直接呼び出すことで破壊しました。これは通常、VPTRをnulえないので、ベースクラスのVtableを指し示すことになりますが、実装に依存します。

ほとんどの場合、ケース1。メモリブレークポイントを備えたデバッガーがあり、問題を確実に再現できる場合は、VPTRにメモリブレークポイントを設定して、それを変更しているものを確認します。

他のヒント

おそらく何かがオブジェクト全体を上書きしました。このようなもの:

memset( object, 0, sizeof( *object ) );

VPTRを持つオブジェクトで使用されるまで、これは問題ありません。

オブジェクトのデストラクタ中にVテーブルを使用しようとしている可能性があります。 Vテーブルは現時点では利用できません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top