Windows 是什么原因造成的;此应用程序已请求运行时以异常方式终止它;?

Windows 是什么原因造成的;此应用程序已请求运行时以异常方式终止它;?,windows,language-agnostic,msvcrt,Windows,Language Agnostic,Msvcrt,Visual C运行时引发了一个常见错误: 此应用程序已请求运行时以异常方式终止它。 有关更多信息,请联系应用程序的支持团队 这个错误消息实际上是什么意思 让我用一个比喻来确切地解释我的问题 如果我看到一条消息: 异常:访问冲突(0xc0000005),地址0x702be865 这种访问违规与性骚扰或有人试图闯入我的电脑无关(一般性故障是一名准将试图读取我的C驱动器,或者你可能因在Windows 95中执行非法操作而被关进监狱) 在这种情况下,访问冲突对应于常量异常访问冲突(在winbase.

Visual C运行时引发了一个常见错误:

此应用程序已请求运行时以异常方式终止它。
有关更多信息,请联系应用程序的支持团队

这个错误消息实际上是什么意思


让我用一个比喻来确切地解释我的问题

如果我看到一条消息:

异常:访问冲突(0xc0000005),地址0x702be865

这种访问违规与性骚扰或有人试图闯入我的电脑无关(一般性故障是一名准将试图读取我的C驱动器,或者你可能因在Windows 95中执行非法操作而被关进监狱)

在这种情况下,访问冲突对应于常量
异常访问冲突
(在
winbase.h
中声明,值为0xC0000005)。此常量是一个可能的异常错误代码,可以在结构中返回。代码
ACCESS\u违规
表示程序试图读取或写入内存中不应该读取或写入的地址。如果您试图读取从未分配的内存地址,那么您正在做一些非常糟糕的事情——异常告诉您这一点

它通常是在程序的内存指针无效或不再有效时产生的。解决方案是停止尝试访问无效内存

注意:我不是问:

  • 为什么程序x出现C0000005错误
  • 为什么我的代码会出现访问冲突
  • 如何调试访问冲突
因此,如果我问您,是什么导致访问冲突,您不会告诉我检查堆栈跟踪、查看输出窗口或发布示例代码。您可能会说,“这是因为试图访问无效的内存。”

回到我的问题上来 以下错误是什么意思:

此应用程序请求运行时以异常方式终止。

我(相当)确定Microsoft Visual C运行时库没有以下功能:

void TerminateRuntime(bool UnusualWay);
所以我必须试着弄清楚它到底意味着什么:

  • 终止visual C运行库意味着什么?(msvcrt是一个dll;您不会终止它,只是不再使用它)
  • 终止MSVCRT的通常方法是什么
  • 有人会选择以一种不寻常的方式终止它吗
  • 今天的不同寻常的方式实际上是过去的惯常的方式的一种早已被弃用的形式吗
  • 如果我(错误地)以一种不寻常的方式终止它,我会怎么做以通常的方式终止它
换句话说:MSVCRT捕获并隐藏在非信息性错误消息后面的错误是什么?

调用函数时,您会收到该消息

中止 中止当前进程并返回错误代码

void abort( void );
返回值 中止不会将控制权返回到调用进程。默认情况下,它终止当前进程并返回退出代码3

评论 默认情况下,中止例程打印消息:

“此应用程序请求运行时以异常方式终止它。有关详细信息,请与应用程序的支持团队联系。”

似乎在最新版本的VC运行时中,消息已被替换为“abort()已被调用”,也许是为了澄清它的真正含义。如果要重现该消息,请使用旧的VC运行时(当然是VC++6.0),并调用
abort()

在内部,当被调用时,它调用在internal.h中定义的函数,该函数基本上“为控制台应用程序向stderr发出运行时错误消息,或为Windows应用程序在消息框中显示该消息”。cmsgs.h中定义了“此应用程序已请求运行时以异常方式终止它”的错误消息:

cmsgs.h

#define _RT_ABORT_TXT  "" EOL "This application has requested the Runtime to terminate it in an unusual way.\nPlease contact the application's support team for more information." EOL
并且传入的错误代码(
\u RT\u ABORT
)在rterr.h中定义:

rterr.h

#define _RT_ABORT  10  /* Abnormal program termination */
因此,您也可以通过调用
\u amsg\u exit(\u RT\u ABORT)


按问题更新海报:我问这个问题两周后:

您正在运行您的程序,然后它突然退出 消息此应用程序已请求运行时在中终止它 一种不同寻常的方式。发生了什么事

这条信息也被打印出来了 函数,该函数也会导致程序运行

您的程序可能会显式地调用abort,也可能最终被终止 由运行库本身隐式调用

  • 当断言失败时
  • 默认情况下,调用中止

C++标准阐明了<代码>终止< /代码>的条件 我打过电话,名单很长,所以我不想重复了 在这里详情请参阅C++最喜欢的C++标准。(修订) 最常见的原因是引发未处理的异常。)


当消息显示“terminate it”时,它意味着终止应用程序,而不是终止运行时。我找不到关于MSDN的任何文档,但许多论坛帖子都提到了这条消息:共识似乎是,这意味着抛出了一个异常,但从未被捕获。这个问题写得太离奇了,以至于即使我碰巧发现它没有用,我也会对它进行升级和加星。特别是,我喜欢你建议的
TerminateRuntime
声明。(我冒昧地清理了一些小事情,如资本化;我