vtable の破損の問題を引き起こしているルートで助けが必要です (それが起こっているかどうかはわかりません)。これは、コードの非常に単純化されたバージョンです。
class CBase
{
public:
CBase()
virtual ~CBase()
virtual void base_virtual_fn1() = 0;
virtual void base_virtual_fn2();
private:
CData _data;
};
class CDerived : public CBase
{
public:
CDerived();
virtual ~CDerived()
virtual void base_virtual_fn1();
virtual void base_virtual_fn2();
virtual void derived_virtual_fn1();
virtual void derived_virtual_fn2();
private:
// Contains vectors , maps, integers, bools.
};
CDerived のインスタンスを作成し、派生クラスの仮想関数 (derived_virtual_fn2 など) を呼び出すと、別の関数 (derived_virtual_fn1) が呼び出されます。
base_virtual_fnx の呼び出しに問題はありません。
これは、ヒープ上に作成されたオブジェクトでのみ発生し、ローカル オブジェクトでは発生しません。
これらのクラスは共有ライブラリにあります。Linux (SLES 10) で gcc 3.4.2 を使用しています。このコードのいずれにも pragma pack ディレクティブはなく、C と C++ コードが混在しています (extern c が使用されています)。ここで何が問題になる可能性がありますか?
他にもたくさんのコード(実行可能ファイル、ライブラリ)があることを忘れていました