【发布时间】:2011-08-02 11:09:09
【问题描述】:
每当我尝试访问虚拟功能时,都会遇到分段错误。代码基本上是这样的:
class Super {
public:
Super() { cout << "Ctor Super" << endl; }
virtual void test() = 0;
};
class Sub : public Super {
public:
Sub() { cout << "Ctor Sub" << endl; }
void test() { cout << "Test in Sub" << endl; }
};
void main()
{
Super* s = new Sub;
s->test(); // Segmentation fault So I tried the one below
Sub* s1 = new Sub;
s1->test(); //Still segmentation fault
Sub s2;
s2.test(); // Works fine BUT
Super *s3 = &s2;
s3->test(); // segmentation fault and EVEN
Sub *s4 = &s2;
s4->test(); //segmentation fault
}
我几乎尝试了我所知道的关于虚函数的所有方法,但它不起作用。它实际上是一个更大程序的一部分,所以它可能会出现一些问题,但是一旦我删除虚拟功能或停止使其成为虚拟,它就可以工作。有什么想法吗?
还有什么工具或方法可以检查 vtable 吗?
【问题讨论】:
-
代码在这里构建并运行良好。
-
是的,它应该,但它不在我的机器上。我在 LYnxOS powerPC 机器上运行它。你能想到它不应该运行的任何情况吗?
标签: c++ segmentation-fault virtual-functions vtable