7

プログラムのコアダンプの1つをデバッグしているときに、多形である含まれているオブジェクトがVPTrを失い、NULLを指していることがわかるシナリオに遭遇しました。

オブジェクトがVPTrを失った場合のシナリオは何でしょうか。

よろしくお願いします、ブリジェッシュ

4

3 に答える 3

7
  1. メモリが破棄されました。つまり、何かがメモリを上書きしました。

  2. delete を呼び出すか、デストラクタを直接呼び出して、それを破棄しました。これは通常、vptr を NULL アウトしません。基本クラスの vtable を指すようになるだけですが、それは実装によって異なります。

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

于 2010-10-19T07:16:03.620 に答える
5

何かがオブジェクト全体を上書きした可能性があります。このようなもの:

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

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

于 2010-10-19T07:25:15.873 に答える
0

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

于 2010-10-19T09:27:57.077 に答える