笔记本打开图片出现“0x04752847”指令引用的“0xJ47b4000”内存。存储器不能被“读取”。发生了什么事?
“0x”指令引用了“0x”内存。存储器不能被“读取”。
0x指令引用的0x内存,不能“写入”。
相信大家都看到了上面的情况,甚至说有网友因为对这种频繁的错误提示不满意而反复重装系统。相信普通用户应该看不懂那些复杂的十六进制代码。
造成这种现象的原因有很多。一是硬件有问题,也就是内存,二是软件有很多问题。
一:先说硬件:
一般来说,电脑硬件不容易坏。内存问题不太可能(除非你的内存真的是一堆杂牌),主要方面是:1。内存坏了(大多是二手内存),2。使用有质量问题的内存,3。插在主板上的内存金手指部分灰尘太多。4。使用不同品牌和容量的内存,导致不兼容。5。超频导致的散热问题。可以用软件MemTest来检查内存,可以彻底检查内存的稳定性。
第二,如果没有,则排除软件故障。
先说原理:内存中有一个用来存储数据的地方叫缓冲区。当程序将数据放入缓冲区时,需要操作系统提供的“函数function”来应用。如果内存分配成功,函数会将新打开的内存区域的地址返回给应用程序,应用程序可以通过这个地址使用这个内存。这就是“动态内存分配”,内存地址也是编程中的“光标”。内存并不总是可用和取之不尽的,有时内存分配会失败。当分配失败时,系统函数将返回值0。此时,返回值“0”不再表示新启用的光标,而是系统发送给应用程序的通知,表示发生了错误。作为应用程序,应该在每次内存应用后检查返回值是否为0。如果是,则说明存在故障,需要采取一些措施来挽救,增强了程序的“健壮性”。如果应用程序不检查这个错误,它会认为这个值是根据“思维惯性”分配给它的可用游标,并在后续执行中继续使用这个内存。真正的0地址存储区存储的是计算机系统中最重要的“中断描述符表”,是绝对不允许应用程序使用的。在一个没有保护机制的操作系统中(比如DOS),向这个地址写数据会导致立即崩溃,而在一个健壮的操作系统中,比如Windows,这个操作会立即被系统的保护机制捕获,结果操作系统会强制关闭错误的应用程序,防止其错误扩大。此时会出现内存无法“读取”的错误,指出引用的内存地址为“0x00000000”。内存分配失败的原因有很多,比如内存不足,系统函数版本不匹配等。所以这种分配失败多见于操作系统使用时间较长,安装了多种应用程序(包括无意中“安装”的病毒程序),大量更改系统参数和系统文件之后。
在使用动态分配的应用程序中,有时会发生这样的情况,程序试图读写一个“应该可用”的内存,但是由于某种原因,预期的可用游标失败了。可能是“忘记”向操作系统要求分配,也可能是程序本身在某个时候取消了这个内存,“没注意”等等。被注销的内存被系统回收,其访问权不再属于应用程序,因此读写操作也会触发系统的保护机制,而试图“违法”的程序唯一的最终结果就是被操作终止,收回所有资源。计算机世界的法则还是比人类有效和严厉得多!像这样的情况属于程序本身的BUG,你经常可以在一个特定的操作序列中重现错误。无效光标不一定是0,所以错误提示中的内存地址不一定是“0x00000000”,也可以是其他随机数。
首先,建议:
1,检查系统中是否有特洛伊木马或病毒。这类程序为了控制系统,往往会不负责任地修改系统,导致操作系统异常。平时要加强信息安全意识,千万不要对来源不明的可执行程序感到好奇。
2、更新操作系统,让操作系统安装程序复制正确版本的系统文件,修正系统参数。有时候操作系统本身也有bug,要注意安装官方发布的升级程序。
3、尽量使用最新的正式版应用,Beta版,试用版都会有bug。
4.删除并重新创建Winnt\System32\Wbem\Repository文件夹中的文件:右键单击桌面上的“我的电脑”,然后单击“管理”。在“服务和应用程序”下,单击“服务”,然后关闭并停止Windows Management Instrumentation服务。删除Winnt\System32\Wbem\Repository文件夹中的所有文件。(请在删除之前备份这些文件。)打开服务和应用程序,单击服务,然后打开并启动Windows Management Instrumentation服务。当该服务重新启动时,将根据以下注册表项中提供的信息重新创建这些文件:HKEY _本地_机器\软件\ Microsoft \ WBEM \ CIMOM \ autorecovermofs。
这里有几个例子供你分析:
例1:IE浏览器中出现“08ba9ef”指令引用的“0x03713644”内存或“0x70dcf39f”指令引用的“0x0000000”内存。存储器不能被“读取”。要终止程序,请单击“确定”。单击“确定”后,将出现消息框“出现内部错误,您正在使用的一个窗口即将关闭”。关闭这个提示信息后,IE浏览器也关闭了。解决方案:
1,开始-运行窗口,输入“REGSVR32 actxprxy.dll”回车,会出现一个信息对话框“actxprxy.dll的DLLRegisterServer成功了”,确认。然后依次运行以下命令。(有人说这个方法没必要,但是重新注册那些。dll不会对系统造成损害。反正做什么都是为了解决问题就够了。)
shdocvw.dll注册服务商32
oleaut32.dll注册服务商32
actxprxy.dll注册服务商32
mshtml.dll注册服务商32
msjava.dll注册服务商32
browseui.dll注册服务商32
urlmon.dll注册服务商32
2.修复或升级IE浏览器,同时给系统打补丁。我见过的修复方法之一就是把系统恢复到初始状态。建议将IE升级到6.0。
例2:一些应用错误:“0x7cd64998”指令引用了“0x14c96730”内存。存储器不能被“读取”。解决方案:Win XP的“预读”技术,一种优化技术,也被应用到应用程序中。系统对每个应用程序的前一次启动进行分析,然后添加一个虚拟的“内存映像”来描述应用程序的需求,并将这些信息存储在Windows\Prefetch文件夹中。一旦镜像建立,应用软件的加载速度大大提高。XP的预读数据存储最近八次系统启动或应用软件启动的信息。建议更换虚拟内存,删除所有*。PF文件,并让windows再次收集程序的物理地址。
例3:双击XP下光盘中的“AutoRun.exe”文件,显示“0x77f745cc”指令引用的“0x00000078”内存。存储器不能被“写入”。要终止程序,单击“确定”,但它在Windows 98中正常运行。解决方法:这可能是系统的兼容性问题。对于winXP系统,右击“AutoRun.exe”文件,属性和兼容性,选择“在兼容模式下运行此程序”,选择“Windows 98/Me”。Win2000,如果SP打了补丁,只要启动运行,输入:regsvr 32 c:\ win nt \ app patch \ slayer ui.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中出错。只要打补丁或者升级到最新版本就没事了。