【发布时间】:2015-05-03 16:52:12
【问题描述】:
我遇到了一个非常零星的错误,其中虚拟函数在运行时看起来已经变得“纯”。一定是内存损坏,显然对象没有被销毁,但它可能在某个地方被覆盖了。
调试器将虚函数列表中的一个指针显示为 NULL。
问题是,您能否在运行时判断函数是否 == NULL?
&(object->function)==NULL
给出编译错误 "对绑定成员函数表达式的非法操作"
编辑: 有了这句话,我想做的是在崩溃点之前进行一些检查,看看我是否可以在运行时拦截情况(函数地址为 0x00000000)。显示代码会有点长,因为有问题的函数的对象可能已经存在了一段时间并且经历了许多过程,所以我不指望能解决实际问题。我只是想知道我是否可以进行一些测试以及早发现损坏(该错误非常零星)
【问题讨论】:
-
对我来说听起来像是 XY 问题 :)
-
我不太明白这个问题.. 如果我明白了,我会开始想“这家伙做错了什么”。你能再贴一些代码来说明清楚吗?
-
@orlp 是的,比如自动析构函数调用已删除的对象等。
-
当基类ctor和dtor运行时,虚函数调用基类方法。
-
你试过valgrind吗?您可能在某处发生了一些内存损坏。
标签: c++ pure-virtual