【发布时间】:2023-03-14 18:17:02
【问题描述】:
我在这里遇到了一个奇怪的问题。假设我有一个带有一些 virtual 方法的类。在某些情况下,此类的实例应调用其中一种方法。大多数时候那个阶段没有问题,但有时发现无法调用虚拟方法,因为指向该方法的指针为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();
}
不涉及构造函数或析构函数。
【问题讨论】:
-
您确定您使用有效的指针或引用调用这些虚拟方法吗?在调用此类方法之前,是否有可能使您的指针无效/删除?这就是我开始寻找的地方,至少没有任何示例代码......
-
@zdawg,当应用程序崩溃时,对象的this-pointer有效,但属于该对象的问题方法的指针为空。
-
当您在调试器中时 - this 指针的计算结果是什么?空?
-
@tim,不,这个指针被正常评估,它有很多字段也被正常评估。
-
NULL 或以其他方式损坏 this* 通常不会引发异常,除非/除非访问成员变量。调用成员函数时不会取消引用。回到主题,当我得到一个异常并且不清楚是什么导致它时,我要做的第一件事就是查看崩溃位置的程序集。
标签: c++ access-violation