需要 root 帮助导致 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 的一个实例并调用派生类虚拟函数时,派生_virtual_fn2 另一个函数被称为派生_virtual_fn1。
调用 base_virtual_fnx 没有问题。
这只发生在堆上创建的对象而不是本地对象。
这些类位于共享库中。我在 Linux (SLES 10) 上使用 gcc 3.4.2。此代码中没有 pragma pack 指令,并且混合了 C 和 C++ 代码(使用了 extern c)。这里可能是什么问题?
我忘了提到还有很多其他代码(可执行文件,库)