我有一个非常奇怪的问题,我已经花了好几个小时的注意力了:
对我正在处理的软件提供错误的输入,我可以产生异常(当然是这样)。这工作正常,我在执行程序时看到了正确的错误消息。 但是,当我通过API传递完全相同的输入(产生几乎相同的控制流)时,程序崩溃。通过调试,我看到以下内容(我使用gdb进行调试):
(gdb)s
名为
的纯虚方法编程接收信号SIGABRT,已中止。
__pthread_kill()中的0x00007fff95c64ce2
(gdb)
我真的不明白这里发生了什么。从现在开始涉及虚拟方法(据我所知),我也无法想象,有一些悬空指针或类似的东西(否则我会期望获得空指针异常)。由于整个程序很大,我不知道在哪里寻找问题我也无法重现它。
有没有人知道这种行为的来源是什么?
最佳马库斯
答案 0 :(得分:2)
我想知道你是从构造函数还是析构函数中调用某些(非纯粹的)虚方法,或者可能是某些转换错误。我猜你应该在你的异常类中检查这个,因为你在抛出一个实例时会收到错误。
实际上,编译器会阻止您使用未实现纯虚函数的类。另一方面,虚函数多态在构造函数和析构函数中并不完全安全。
只是一个建议,但没有看到代码,这只是一个假设。
我也会做一个干净的构建,也许你出于某种原因有一些陈旧的对象。