Ton*_*ony 5 c++ access-violation
我这里有一个奇怪的问题.假设我有一个带有一些虚方法的类.在某种情况下,此类的实例应调用其中一种方法.大多数情况下,该阶段没有问题,但有时会发现无法调用虚方法,因为指向该方法的指针为NULL(如VS所示),因此发生内存访问冲突异常.怎么会发生这种情况?
应用程序非常庞大和复杂,所以我真的不知道低级步骤会导致这种情况.发布原始代码不会有用.
UPD:好的,我看到我对这个问题的介绍是不确定的,所以示意代码看起来像
void MyClass::FirstMethod() const { /* Do stuff */ }
void MyClass::SecondMethod() const
{
// This is where exception occurs,
// description of this method during runtime in VS looks like 0x000000
FirstMethod();
}
Run Code Online (Sandbox Code Playgroud)
没有涉及构造函数或析构函数.
堆腐败可能是候选人.对象中的v表指针易受攻击,它通常是对象中的第一个字段.对于碰巧与对象相邻的某种其他对象的缓冲区溢出将擦除v表指针.通常很久以后,对虚拟方法的调用将会受到打击.
另一个经典案例是有一个坏的"this"指针,通常是NULL或低值.当您调用方法的对象引用不好时,就会发生这种情况.该方法将照常运行,但一旦尝试访问类成员就会爆炸.再次,堆损坏或使用已删除的指针将导致此问题.祝你好好调试一下; 这绝非易事.