C ++捕获无效的内存异常

时间:2013-07-28 23:03:25

标签: c++ exception

考虑以下代码:

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

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

1 个答案:

答案 0 :(得分:1)

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

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