C++访问冲突崩溃

标签 c++ access-violation

当我尝试访问这个特定指针时,应用程序崩溃并显示 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/

相关文章:

c++ - 调用方法时出现访问冲突异常

c++ - Qt 中的锁位。如何实现?

C++ - 直接插入 std::map 而不使用赋值运算符

python - 错误 : stray '\' in program in macro definition

windows - 为什么注入(inject)的任何 DLL 都会使主机进程崩溃?

windows - 是什么使 NTDLL!_KiUserApcDispatcher 跳转到不属于进程中模块的地址?

C++ "Getter"方法在尝试返回同一类中的私有(private)变量时抛出访问冲突

c++ - 在结构中使用数组

c++ - MSVC 2015 为 std::vector 选择不正确的构造函数重载

c++ - 为什么未初始化的指针会导致接近 0 的内存访问冲突?