時々、メンバーの順番を変更するたびに、C++クラスの派生順序を変更すると問題が解決され、クラッシュが修正されるというこの問題が発生しました。メンバーの順序、派生の順序は重要ですか?
最近、私は私のクラスの先頭に下の位置からプライベートメンバ変数の位置を移動するとエラーが
私はクラスA持っていた別の時間固定してしまった:公共のBを、公共C.瞬間Iこれを クラスA:public C、public Bに変更しました。クラッシュするコードが動作し始めました。 Cは仮想メソッド を含むクラスであり、前者の場合、クラスAはCでオーバーライドされたメソッドを見つけられませんでしたが、後でそれを見つけることができました。これは仮想ポインタの破損によるものですか?もしそうなら、それは何のために のメンバーですか?メンバーの順序を変更したときのメモリレイアウトの変更はわかっていますが、VS2008ではクラッシュが発生した理由を確認できなかったため、この種の問題をデバッグするにはどうすればよいですか?
注:基本クラスのBとCは完全に独立しており、互いに
デバッガは、クラッシュについて何かを教えてくれているに違いありません。 –
メンバの順序を変更してクラッシュを修正すると、既存のメモリ破損を単に別の方法でマニフェストすることによってマスクするだけです。 – NPE
これを説明するためのサンプルコードを投稿できますか? – hmjd