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

问题描述 投票:2回答:3

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

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

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

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

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

c# .net memory runtime-error
3个回答
1
投票

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

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

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

这是一种可能性。

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

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

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

if (this.IsDisposed)
{
    return;
}

...在按钮处理之前。


0
投票

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


0
投票

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

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