`
阅读更多

问题:Unhandled exception at 0x00007FF84A0059C5 (UE4Editor-XXX.dll) in UE4Editor.exe: 0xC0000005: Access violation reading location 0x0000000000000000.

 

错误消息表明这是一个空指针取消引用,“访问冲突读取位置 0x00000000” 意味着你正在取消引用尚未初始化的指针,因此具有垃圾值。这些垃圾值可以是任何值,但通常它恰好是 0,因此你尝试从内存地址 0x0 读取,操作系统会检测并阻止你这样做。

 

Linux 等操作系统将最低地址(例如前 32MB:0x00_0000 -0x200_0000)保留在进程的虚拟地址空间之外。这样做是因为取消引用归零的非初始化指针是一个常见的错误,就像在这种情况下一样。因此,当发生这种类型的错误时,不是实际读取恰好位于地址 0x0 的随机变量(但不是指针如果正确初始化后的内存地址),而是从外部的内存地址读取进程的虚拟地址空间。这会导致页面错误,从而导致分段错误,并向进程发送信号以将其杀死。这就是你收到访问冲突错误的原因。

 

在vs里面进行调试,如果已分配的内存会用 0xcd来填充。已释放的内存用0xdd填充。被保护的内存用0xfd填充。

 

那么该如何解决该问题呢?需要从以下方面进行检查:

 

1、野指针访问,检查是否访问一个已经被释放掉的指针。

2、数组越界,检查是否赋值了已经溢出的值或地址。

3、多线程是否同步。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics