【问题标题】:C++ catch invalid memory exception [duplicate]C ++捕获无效的内存异常[重复]
【发布时间】:2013-07-28 23:03:24
【问题描述】:

考虑这段代码:

try
{
    int* test = (int*)0x00000001;
    *test = 232;
}
catch(...)
{
}

我收到了Access violation writing location 0x00000001。是否有可能以简单的方式捕捉到这一点,或者避免我的程序以不愉快的方式崩溃?

【问题讨论】:

  • 答案取决于操作系统。此代码适用于什么操作系统?
  • 异常不是避免修复代码错误的方法
  • @aaronman 这不是我的代码中的错误,我使用的外部 .dll 大多数时候会返回无效的内存位置。我写了这个片段来代表我的问题
  • @Pacha - 在 Linux 中,您可以通过 sigaction 设置信号处理程序。两者都没有便携方式。
  • 或者,让你的经理相信这是你同事的问题,而不是你的问题。

标签: c++ exception


【解决方案1】:

这在 C++ 中是不可能的,但大多数平台都有一些方法可以让您捕捉到这个错误。一般来说,你能做的就是以一种可控的方式关闭你的应用程序。在您发现错误时,您的进程上下文已被污染,除非您可以修复错误,否则如果您尝试恢复,只会导致另一个异常。

我建议包装这个 DLL。在这种情况下,使用可执行文件只是为 DLL 提供服务。捕获异常(对于 Windows,使用 SetUnhandledExceptionFilter)并在过滤器中,静默终止。让您的主要可执行文件注意到包装进程消失并启动一个新进程。你可以使用一个可执行文件,如果你有一个参数让它作为包装器启动。

【讨论】:

  • 那么不容易。我想我将不得不重写协议。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-28
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 2018-11-29
  • 2012-07-13
相关资源
最近更新 更多