当我尝试访问这个特定指针时,应用程序崩溃并显示 c0000005 访问冲突错误。
我如何捕获此错误并防止它像在 C# 中使用 try&catch block 那样关闭进程。 或者我如何在使用之前检查对该内存区域的访问是否被拒绝?
例子:
MyClass** a = (MyClass**)(0x12345678);
a[0]->b = 1;
我正在访问一个指针表并设置该类成员之一的值。 这确实有效,但问题是“0x12345678”并不总是在该区域加载类。该地址有一个值,但它没有指向正确的内存区域,也没有保存值 0。
请记住,这是一个加载到我不再拥有其源代码的应用程序中的 DLL。 所以我正在尝试动态设置应用程序的设置。
最佳答案
您可以使用 Structured Exception Handling来捕获这些类型的错误。特别是过滤 EXCEPTION_ACCESS_VIOLATION
。
只要确保您在吞下异常时知道自己在做什么:如果您的垃圾地址指向保护页,您可能会看到描述的行为 here .
关于C++访问冲突崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8982614/