首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排除外部错误R6025 -纯虚拟函数调用

排除外部错误R6025 -纯虚拟函数调用
EN

Stack Overflow用户
提问于 2019-01-28 11:49:25
回答 1查看 1.3K关注 0票数 1

我有一个VS2017 .NET程序,它已经开始使用以下对话框消息崩溃:

代码语言:javascript
复制
Microsoft Visual C++ Runtime Library

Runtime Error!

Program: [program.exe]

R6025
-pure virtual function call

此对话框是在我的程序之外生成的。

当我在VS2017中调试程序时,过一段时间对话框就会出现,但是程序仍然正常运行。只有在我点击“确定”之后,我的程序才会停止。我得到了AppDomain.CurrentDomain.ProcessExit的调用,但是没有关于是什么导致程序退出的信息。

Windows事件日志显示其中一个涉及的dll是MSVCR110.dll:

代码语言:javascript
复制
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

如何了解更多有关此错误的信息?有没有可能找出导致坠机的非法电话是从哪里来的?该程序解决方案有几个第三方dll以及一些C++项目。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-28 12:10:56

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

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

现在在C++中,在构造派生类的过程中,对象的类型随着构造函数的运行而改变。基类ctor首先运行,在此阶段,对象的类型仍然是基本类型。这意味着您不允许调用纯虚拟函数;派生类的覆盖只有在派生ctor运行时才可用。这是有意义的;重写很可能需要尚未初始化的派生类的成员。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54401377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档