虚函数调用分段故障
Virtual function invoking segmentation fault
每当我试图访问虚拟函数时,我都会遇到分段错误。代码基本上是这样的:
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
}
我几乎尝试了我所知道的关于虚函数的所有方法,但它不起作用。它实际上是一个更大的程序的一部分,所以它可能会有一些问题,但一旦我删除虚函数或停止使其虚函数,它就会工作。什么好主意吗?
还有什么工具或方法来检查虚表吗?
Sub类不继承Super类,因此它们在当前的编写中没有任何关系。
这段代码可以编译吗?
- 所有的方法都是私有的。
- Sub和Super之间没有继承。
- 构造函数命名错误
- main()函数不返回int。
除了编译器错误,我不知道是什么原因导致了这个问题。你能给出确切的编译器版本吗?
同时,我想尝试以下方法:
- 在类中添加虚拟
int
成员。可能是零大小的类会导致错误的代码生成。 - 也声明
Sub::test()
为虚的。同样,这里可能是编译器行为错误。
还有,你得到了什么样的分割错误?是SIGSEGV
信号还是其他信号?您能提供调试器回溯和本地程序集转储吗?
相关文章:
- 分段故障(堆芯转储)矢量
- 数组的指针从不分段故障
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 分段故障 运行C++代码时出现 SIGSEGV
- 分段故障背包问题
- 分段故障 11,从类函数显示动态 C 字符串
- 面临分段故障 使用 ffmpeg 读取视频时,因为"pFormatCtx-> streams [i]-> codecpar"的地址0x00
- 在C++中,当指向删除和指向不同对象时,分段故障指针
- 对程序故障进行分段
- 分段故障说明
- 分段故障(核心转储)-不知道为什么
- 分段故障线程
- hiredis SET遇到分段故障
- 分段故障,合并排序算法
- 多线程程序中的分段故障和gdb回溯上的不完整信息
- 到达主C++之前分段故障
- 分段故障核心使用 IF流转储
- 使用向量的移动键盘排列(分段故障)
- 在二进制树插入和遍历期间,我得到了分段故障
- 分段故障在类之间返回整数