每当我尝试访问虚拟功能时,我都会遇到分段错误。代码基本上是这样的:
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吗?
答案 0 :(得分:0)
Class Sub不会继承Super类,因此它们与当前编写的内容无任何关联。
答案 1 :(得分:0)
这段代码可以编译吗?
将所有这些结果修复为编译并在没有段错误的情况下运行的代码。
答案 2 :(得分:0)
除了编译器错误之外,我没有看到可能导致问题的原因。你能给出确切的编译器版本吗?
与此同时,我会尝试以下方法:
int
成员。可能是零大小的类导致错误的代码生成。Sub::test()
声明为虚拟。同样,编译器可能在这里行为不端。另外,你得到了什么样的细分错误?它是SIGSEGV
还是另一个信号?你能给一个调试器回溯和本地程序集转储吗?