考虑这段代码:
try
{
int* test = (int*)0x00000001;
*test = 232;
}
catch(...)
{
}
我得到一个Access violation writing location 0x00000001
. 是否有可能以简单的方式捕捉到这一点,或者避免我的程序以不愉快的方式崩溃?
这在 C++ 中是不可能的,但大多数平台都有一些方法可以让你捕捉到这个错误。通常,您所能做的就是以可控的方式关闭您的应用程序。在您捕获错误时,您的流程上下文已被污染,除非您可以修复错误,否则如果您尝试恢复,它只会导致另一个异常。
我建议包装这个 DLL。在这种情况下,使用可执行文件只是为 DLL 提供服务。捕获异常(对于 Windows,使用SetUnhandledExceptionFilter)并在过滤器中,只是静默终止。让您的主要可执行文件注意到包装进程消失并启动一个新进程。您可以使用一个可执行文件,如果您有一个参数使其作为包装器启动。