gpt4 book ai didi

c++ - 排除外部错误 R6025 - 纯虚函数调用

转载 作者:行者123 更新时间:2023-12-02 10:24:02 27 4
gpt4 key购买 nike

我有一个 VS2017 .NET 程序已开始崩溃,并显示此对话框消息:

Microsoft Visual C++ Runtime Library

Runtime Error!

Program: [program.exe]

R6025
-pure virtual function call

这个对话框是在我的程序之外产生的。

当我在 VS2017 中调试程序时,一段时间后出现对话框,但程序仍在正常运行。
只有在我单击“确定”后,我的程序才会停止。我收到 AppDomain.CurrentDomain.ProcessExit 的调用,但没有关于导致程序退出的原因的信息。

Windows 事件日志显示涉及的 dll 之一是 MSVCR110.dll:
Faulting application name: XXX.exe, version: 1.0.0.0, time stamp: 0x5c4aecde
Faulting module name: MSVCR110.dll, version: 11.0.51106.1, time stamp: 0x5098858e
Exception code: 0x40000015
Fault offset: 0x000a327c
Faulting process id: 0x128c
Faulting application start time: 0x01d4b6d3eed97aed
Faulting application path: C:\Users\dkrewind\AppData\Local\Apps\2.0\DBXO5LPH.PYZ\PTX522V3.2EO\insq..tion_1733f97596464edb_0001.0000_013e50ce80c4530d\XXX.exe
Faulting module path: C:\Windows\system32\MSVCR110.dll

如何了解有关此错误的更多信息?是否有可能找出导致崩溃的非法调用的来源?
该程序解决方案有几个 3rd-party dll 以及一些 C++ 项目。

最佳答案

您看到的是虚拟调用的“默认处理程序”。

在 C++ 中,纯虚函数定义为 virtual void foo() = 0 .具有纯虚函数的类不能单独实例化,但可以是基类。派生类必须覆盖纯虚函数。

现在在 C++ 中,在构造派生类期间,对象的类型会随着构造函数的运行而改变。基类ctor首先运行,在这个阶段对象的类型仍然是基类型。这意味着你不能调用纯虚函数;派生类的覆盖仅在派生 ctor 运行时才可用。这是有道理的;覆盖很可能需要尚未初始化的派生类的成员。

Visual C++ 为纯虚函数放置了一个占位符函数。这是标准允许的;调用纯虚函数是未定义的行为,因此对话框完全可以。此时您可以附加一个调试器并检查调用堆栈。那应该直接告诉您调用来自哪里。

关于c++ - 排除外部错误 R6025 - 纯虚函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54401377/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com