如何诊断"指令位于0x .........参考存储器位于0x00000000"

时间:2016-08-03 12:25:26

标签: c# .net memory runtime-error

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

id == 4

不幸的是我自己无法复制它。

我的问题是,我该如何进行诊断/调试呢?我有违规指令的内存位置,但我可能追溯到我的代码中的一行吗?即The instruction at 0x09537333 referenced memory at 0x00000000. The memory could not be read.是指相对于我的应用程序的位置还是在操作系统内(Windows 7 Embedded)?

有没有其他方法可以获得有关此错误的更多信息?我的代码中是否有任何已知的常见原因?

3 个答案:

答案 0 :(得分:1)

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

进行了更多研究,发现此访问冲突错误可能是由对非托管函数/代码的调用中的错误引起的(例如,用C ++编写的dll) - try... catch通常不会捕获此错误,但如果将其添加到app.config文件中,则会执行此操作:

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

这是一种可能性。

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

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

我通过解决导致线程运行这么长时间的问题来修复它,但也是&#34;以防万一&#34;,添加

if (this.IsDisposed)
{
    return;
}

...在处理按钮之前。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

  
      
  1. 卸载有问题的软件

  2.   
  3. 更新驱动程序

  4.   
  5. 按照说明操作:
      右键单击“我的电脑”图标,然后转到“高级”   选项卡,然后单击“性能”下的“设置”。

         

    然后再次转到“高级”选项卡,然后单击“更改”按钮   虚拟内存。执行这些更改后,您可以重新启动计算机   如果它消失就看问题。

  6.