如何诊断“0x指令...引用内存为0x00000000”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何诊断“0x指令...引用内存为0x00000000”相关的知识,希望对你有一定的参考价值。

我负责一个已知会抛出此错误的应用程序。

The instruction at 0x09537333 referenced memory at 0x00000000. The memory could not be read.

不幸的是我不能自己复制它。

我的问题是,我该如何进行诊断/调试呢?我有违规指令的内存位置,但我可能追溯到我的代码中的一行吗?即0x09537333是指相对于我的应用程序的位置还是在OS(Windows 7 Embedded)中?

有没有其他方法可以获得有关此错误的更多信息?在我的代码中我应该注意哪些已知的常见原因?

答案

我已经解决了这个问题 - 这里有一些信息,以防其他人有同样的问题。

做了一些研究,发现这个访问冲突错误可能是由于对非托管函数/代码的调用中的错误引起的(例如用C ++编写的dll) - try... catch通常不会捕获此错误,但是如果这被添加到app.config文件中:

<runtime>
   <legacyCorruptedStateExceptionsPolicy enabled="true" />
</runtime>

这是一种可能性。

但实际上在我的情况下,错误是由一个线程在一个表单上运行异常长时间引起的。

表格在完成之前已经关闭。在线程结束时,它试图隐藏表单上的按钮。由于表单现在是Disposed,因此抛出了Access Violation错误。

我通过解决导致线程运行这么长时间的问题来解决这个问题,但也补充说“以防万一”

if (this.IsDisposed)
{
    return;
}

...在按钮处理之前。

另一答案

每当0x00000000是无法读取的地址时,您所拥有的是空指针解除引用。

另一答案

您可以通过以下方式解决此问题

  1. 卸载有问题的软件或
  2. 更新驱动程序或
  3. 按照指示 : 右键单击“我的电脑”图标,然后转到“高级”选项卡,然后单击“性能”下的“设置”。 然后再次转到“高级”选项卡,然后单击“虚拟内存”下的“更改”按钮执行这些更改后,您可以重新启动计算机并查看问题是否消失。

以上是关于如何诊断“0x指令...引用内存为0x00000000”的主要内容,如果未能解决你的问题,请参考以下文章

如何解读SPSS共线性诊断结果以及解决多重共线性问题的方法

变频电源出现故障了怎么办,该如何去诊断呢

如何诊断打印机故障

如何看懂UDS诊断报文

如何在我的 VS 代码扩展中获得选定的诊断?

如何看懂UDS诊断报文