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