天天看点

内存不能“read”

内存不能“read,writen”

        内存不能被读取和写入,我想大家一定见过这种类似的问题。最近公司一直出现这种问题:

<a target="_blank" href="http://blog.51cto.com/attachment/201009/092327462.jpg"></a>

而且有的时候桌面上的任何图标都是显示不完整,从事件查看器中出现很多莫名的提示错误。这个真的很头疼,为了弄清事件的来源(是否是系统出现问题)每一次都是重新启动。每次重启完成之后,系统就正常啦。但这也不能解决实际问题啊。问题好像就是系统在启动的时候,有些文件没有加载上或者是加载并不完整。

        下面我希望和大家分享一下我的所得,有更好的方法大家可以一起去探讨啊!一般情况下出现这种问题有两根方面的原因:一是.硬件即内存方面的问题;二是软件,这个方面可就多啦。电脑硬件一般不是特别爱出现问题,可能的情况是内存条坏啦,存在质量问题;内存条和插槽接触不是很好,还有就是兼容性的问题。当然我们可以下载一个软件来检测内存的使用情况。现在就来说说软件的问题吧,原理大致是这样的,当系统中的某个程序把数据放置内存中的缓存区域的时候,程序需要操作系统提供的“功能函数”来为其分配内存空间。如果分配成功的话,函数将会把新开辟的内存地址返回给应用程序,应用程序就可以根据这个地址来使用这个内存空间。这就是“动态内存分配”。出现错误的原因就是内存并不是永远能够分配成功的。当分配失败的时候系统函数将会返回一个0值。而程序应用程序在每一次申请内存后都会检查返回值是否为“0”。如果是的话那就好说啦,应用程序一般都会采取一些自救的措施。如果应用程序没有检查这个错误呢,它就是认为这个“0”地址就是它将要使用的内存空间地址。实际上真正的“0”地址内存区域存储的是计算机系统中重要的“中断描述符表”,绝对不能够被应用程序占用。在windows操作系统中这个操作会被系统自我保护机制所捕获,结果就是这个应用程序将会被强行关闭。这个时候就会出现像上面的情况一样:内存不能被“read”,并指出被引用的内存地址不能为“0x000xxxxx”的错误。内存分配失败的原因很多:内存不足,系统中的函数出现错误等。这种情况多出现于系统已经使用很长时间,安装的很多应用软件,结果造成修给了大量的系统参数等。在动态分配应用程序的过程中,有可能会出现这样的情况:应用程序被分配的内存地址已经消失,程序本身在某个时间“注销”了这个内存空间。当这个内存空间被系统收回的时候,这个内存空间的访问权已经不再属于该应用程序,所以这个程序的读写操作同样会被系统终止掉!

       基本上面是我自己的理解,下面是我个人的一些建议:首先先保证自己的系统是一个比较干净的系统,查杀系统中的病毒,让系统检查被攻击的可能。平时的使用中,对系统修复一些漏洞。使用一些稳定版的应用软件。还有就是一种:先停止掉“windows management instrumentation”这个服务,在运行里面输入“services.msc"打开服务管理界面--将这个服务停止。然后进到这个文件夹中:c:\windows\system32\Wbem\Repository 删除里面的所有文件(要是自己是在没有把握的话,可以先对这些文件做好备份),然后启动刚才停止的服务或者重新启动电脑也可以。被删除的文件会在注册表中的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\CIMOM\Autorecover MOFs 这个信息重新创建出来。

本文转自 位鹏飞 51CTO博客,原文链接:http://blog.51cto.com/weipengfei/390461,如需转载请自行联系原作者

继续阅读