【发布时间】:2011-03-03 13:29:38
【问题描述】:
这个人:
virtual phTreeClass* GetTreeClass() const { return (phTreeClass*)m_entity_class; }
调用时,程序因访问冲突而崩溃,即使在完全重新编译后也是如此。所有成员函数和虚拟成员函数都有正确的内存地址(我将鼠标悬停在调试模式下的方法上),但这个函数的内存地址错误:0xfffffffc。
一切看起来都还不错:'this' 指针,在调用此函数之前一切正常。这个功能也比较老了,好久没改了。这个问题只是在一些工作后突然出现,我把它全部注释掉,看看是什么做的,没有任何成功。
所以我去掉了虚拟,编译好了,效果很好。我添加了虚拟的,编译的,它仍然可以正常工作!我基本上什么都没做,记得之前我确实做了完整的重新编译,但当时仍然有错误。
我无法重现该问题。但现在它又回来了。我没有改变任何东西。删除虚拟可以解决问题。
【问题讨论】:
-
作为一个简短的评论,在处理 C++ 类层次结构时,您应该真正避免使用 C 风格的强制转换,尤其是在处理多态类时。出错的机会太多了。
-
我怀疑删除
virtual“固定”任何东西。未定义的行为是不可预测的,当你改变一些无辜的东西时,它甚至可能会起作用。您必须做必要的工作才能重现此内容。您很可能会以这种方式找到错误。如果没有,您可以在这里展示一个很好的复制案例并征求其他意见。 -
我们真的需要看到比这更多的代码才能有任何用处。我的意思是,m_entity_class 来自哪里?它是什么类型的?哪些函数会影响它,它们何时被调用,有哪些用例?
-
是否涉及多重继承?
标签: c++ visual-studio-2008 methods virtual memory-address