“内存不能read”的解决方法
这个现象有很多方面。一是硬件有问题,也就是内存,二是软件有很多问题。
一:先说硬件:
一般来说,电脑硬件不容易坏。内存问题的可能性不大(除非你的内存真的是一堆杂牌)。主要方面有:1。内存坏了(二手内存居多),2。使用了有质量问题的内存,3。插在主板上的金手指部分灰尘太多。4。使用不同品牌不同容量的内存,导致不兼容。5。超频导致的散热问题。可以用软件memtest来检查内存,可以彻底检查内存的稳定性。
其次,如果没有,则排除软件故障。
先说原理:内存中有一块存储数据的地方叫做缓冲区。当一个程序将数据放入缓冲区时,需要操作系统提供的一个“函数function”来应用。如果内存分配成功,函数会将新打开的内存区域的地址返回给应用程序,应用程序可以通过这个地址使用这个内存。这就是“动态内存分配”,内存地址也是编程中的“光标”。内存并不总是可用和取之不尽的,有时内存分配会失败。当分配失败时,系统函数将返回值0。此时,返回值“0”不代表新启用的光标,而是系统通知应用程序发生了错误。作为应用程序,应该在每次内存应用后检查返回值是否为0。如果是,说明出了问题,要采取一些措施来挽救,增强了程序的“健壮性”。如果应用程序不检查这个错误,它会根据“思维惯性”将这个值视为分配给它的可用光标,并在后续执行中继续使用这个内存。真正的0地址存储区存储的是计算机系统中最重要的“中断描述符表”,是绝对不允许应用程序使用的。在没有保护机制的操作系统(如dos)中,向该地址写入数据会导致立即崩溃,而在健壮的操作系统(如windows)中,该操作会立即被系统的保护机制捕获。因此,操作系统将强制关闭故障应用程序,以防止其错误扩大。此时会出现上述内存无法“读取”的错误,引用的内存地址为“0x00000000”。内存分配失败的原因有很多,比如内存不足,系统函数版本不匹配等。所以这种分配失败往往发生在操作系统使用时间较长,安装了多种应用程序(包括不小心安装的病毒程序),大量系统参数和系统文件被更改之后。
在使用动态分配的应用程序中,有时会出现这样的情况:程序试图读写“应该可用”的内存,但不知何故,原本应该可用的游标却失败了。可能是“我忘了”向操作系统请求分配,也可能是程序本身在某个时候注销了这个内存而“没注意”等等。注销的内存被系统收回,其访问权不再属于应用程序。所以读写操作也会触发系统的保护机制。试图“违法”的程序最终结果是被操作终止,所有资源被收回。计算机世界的法律还是比人类有效和严厉得多!这样的情况属于程序本身的bug,你经常可以在一个特定的操作序列中重现错误。无效光标不一定是0,所以错误提示中的内存地址不一定是“0x00000000”,也可以是其他随机数。
首先,大测试建议:
1。检查系统中是否有木马或病毒。这类程序为了控制系统,往往会不负责任地修改系统,导致操作系统异常。我们要时刻加强信息安全意识,千万不要对来源不明的可执行程序感到好奇。
2。更新操作系统,并让操作系统的安装程序复制正确版本的系统文件并校正系统参数。有时候操作系统本身也会有bug。注意安装官方发布的升级程序。
3。尽量用最新的正式版应用,测试版和试用版,都会有bug。
4。删除并重新创建winntsystem32wbemrepository文件夹中的文件:右键单击桌面上的“我的电脑”,然后单击“管理”。在“服务和应用程序”下,单击“服务”,然后关闭并停止windows management instrumentation服务。删除winntsystem32wbemrepository文件夹中的所有文件。请在删除之前创建这些文件的备份副本。)打开服务和应用程序,单击服务,然后打开并启动Windows Management Instrumentation服务。当服务重新启动时,根据以下注册表项中提供的信息重新创建这些文件:HKEY _ local _ MachineSoftWaremicrosoftwBeMciMoAutoRecover Mofs
以下是收集的一些示例供您分析:
示例1:ie浏览器中出现“0x0a8ba9ef”指令引用的“0x03713644”内存,或者“0x70dC”内存无法“读取”。要终止程序,请单击“确定”消息框。单击“确定”后,消息框“出现内部错误,您正在使用的一个窗口即将关闭”再次出现。关闭这个提示信息后,ie浏览器也关闭了。解决方案:
1。开始-运行窗口,输入“regsvr32 actxprxy.dll”并回车,这时会出现一个信息对话框“actxprxy.dll的DLLRegisterServer成功”,确认。依次运行以下命令。(有人说这个方法没必要,但是重新注册那些。dll不会伤害系统。反正从多方入手就够解决问题了。)
regsvr 32 shdocvw . dll
regsvr 32 oleaut32 . dll
regsvr 32 actxprxy . dll
regsvr 32 mshtml . dll
regsvr 32 msjava . dll
Regr32browseui.dll
regsvr32urlmon.dll
2 .修复或升级ie浏览器,同时给系统打补丁。我看到有一种修复方法是把系统恢复到初始状态。建议升级ie。
例2:一些应用错误:“0x7cd64998”指令引用了“0x14c96730”内存。存储器不能被“读取”。解决方案:win xp的“预读”技术也被应用到应用程序中。系统分析每个应用程序的前几次启动,然后添加描述应用程序需求的虚拟“内存映像”,并将这些信息存储在windowsprefetch文件夹中。一旦镜像建立,应用软件的加载速度大大提高。xp的预读数据存储最近8次系统启动或应用软件启动的信息。建议更换虚拟内存,删除所有*。pf文件,并让windows再次收集程序的物理地址。
例3:双击xp下光盘中的“autorun.exe”文件,显示“0x77f745cc”指令引用的“0x00000078”内存。该存储器不能被写入。要终止该程序,请单击“确定”,但它在windows 98中可以正常运行。解决方案:这可能是系统兼容性问题。对于winxp系统,右键“autorun.exe”文件,属性,兼容性,选择“在兼容模式下运行此程序”,选择“windows 98/me”。如果win2000是sp打补丁的,只要启动运行,输入:regsvr 32 c:winnapppatchlayerui.dll即可。右键单击,属性和兼容性选项也会出现。
例4: realone gold关闭时出错。以前都是正常工作的,但是最近每次关闭都出现“0xffffffff”指令引用的“0xffffffff”内存。内存不可能是“已读”的提示。解决方法:当使用的输入法是微软拼音输入法2003,并且隐藏了语言栏(不隐藏的时候没问题)时,关闭realone就会出现这个问题。因此,您可以在关闭realone之前显示语言栏或使用任何其他输入法作为当前输入法来解决此问题。
例5:考试提示:英雄超级放肆自从上网后就玩不了了。每次都提示“0x060692f6”(每次更改)指令引用的“0xff000011”内存不能“读取”。请按“确定”终止程序。解决方案:尝试重新安装英雄超级放肆。如果会重装,可以尝试从官网下载相应版本的补丁。还没有,所以我不得不尝试另一个球员。
例6:双击一个游戏的快捷方式,“0x77f5cd0”指令指向“0xffffffff”的内存,无法“读取”,提示client.dat程序错误。解决方法:重新安装显卡最新驱动,然后下载安装directx9.0.
例7:朋友发消息时,电脑出现错误信息:“0x772b548f”指令引用的“0x00303033”内存,无法“写入”。然后qq自动下线,再打开qq,发现他发的十几条消息。解决方法:这是对方利用qq bug,发送了一个特殊代码,在qq中出错。只要打补丁或者升级到最新版本就没事了。
从上面的例子可以看出,失败的原因是多方面的。在这里,列出之前提到的或可能发生的原因。方便取用:
原因及解决方法
1。如果内存模块损坏,请更换它
2。使用相同品牌的内存,或者如果它与双内存不兼容,则只使用一个内存
3。因内存质量问题更换内存模块
4。散热问题。加强机箱内部的散热
5。内存和主板未正确插入,或者其它硬件不兼容。重新插入内存或更换插槽
6。如果硬盘有问题,请更换硬盘
7。如果驱动器有问题,请重新安装驱动器。如果是新系统,应该先安装主板驱动
8。软件损坏,重新安装软件
9。软件已修补或更新至最新版本
10软件和系统不兼容。修补软件或尝试系统的兼容模式
11软件和软件之间存在冲突。如果最近安装了任何新软件,请尝试卸载
12该软件需要使用其他相关软件。如果有问题,重新安装相关软件。例如,播放某种格式的文件时会出现错误。可能这个文件的解码器有问题。
13病毒问题。
14杀毒软件与系统或软件冲突。因为杀毒软件进入底层监控系统,可能会和某些软件发生冲突。尝试卸载
15系统本身有问题。有时候操作系统本身也会有bug。注意安装官方发布的更新程序,比如sp补丁,装上。如果不行,就重装系统或者换个版本。
0条评论