使用Windows操作系统的人有时会遇到这样的错误消息:
」‘0X?'指令引用的“0x00000000”内存,不能“读”或“写”,然后应用程序关闭。
如果问一些“高手”,得到的回答往往是“Windows好不稳定”之类的愤慨和不屑。其实这个错误不一定是Windows的不稳定造成的。本文将简单分析这个错误的一般原因。
首先,应用程序无法检查内存分配。
当一个程序需要一个内存来存储数据时,需要使用操作系统提供的“函数function”来申请。如果内存分配成功,函数会将新打开的内存区地址返回给应用程序,应用程序可以通过这个地址使用这个内存。这就是“动态内存分配”,内存地址也是编程中的“光标”。内存并不总是可用和取之不尽的,有时内存分配会失败。当分配失败时,系统函数将返回值0。此时,返回值“0”并不代表新启用的光标,而是系统向应用程序发送的出错通知。作为一个应用程序,你应该在每次内存应用后检查返回值是否为0。如果是,说明有故障,要采取一些措施来挽救,增强了程序的健壮性。如果应用程序不检查这个错误,它会根据“思维惯性”将这个值视为分配给它的可用游标,并在后续执行中继续使用这个内存。
真正的0地址存储区存储的是计算机系统中最重要的“中断描述符表”,是绝对不允许应用程序使用的。在没有保护机制的操作系统(如DOS)中,向该地址写入数据会导致立即崩溃,而在健壮的操作系统(如Windows)中,该操作会立即被系统的保护机制捕获。因此,操作系统将强制关闭故障应用程序,以防止其错误扩大。此时会出现上述“写内存”错误,引用的内存地址为“0x00000000”。内存分配失败的原因有很多,比如内存不足,系统函数版本不匹配等。所以这种分配失败往往发生在操作系统使用时间较长,安装了多种应用程序(包括不经意安装的病毒程序),大量系统参数和系统文件被更改之后。
第二,应用由于自身BUG导致内存光标异常。
在使用动态分配的应用程序中,有时会发生这样的情况:程序试图读写一个“应该可用”的内存,但不知何故,原本应该可用的游标却失败了。可能是“我忘了”向操作系统请求分配,也可能是程序本身在某个时候注销了这个内存而“没注意”等等。注销的内存被系统收回,其访问权不再属于应用程序。所以读写操作也会触发系统的保护机制。企图“违法”的程序,唯一的结局就是被操作终止,所有资源被收回。计算机世界的法律还是比人类有效和严厉得多!这样的情况属于程序本身的BUG,你经常可以在一个特定的操作序列中重现错误。无效光标不一定是0,所以错误提示中的内存地址不一定是“0x00000000”,也可以是其他随机数。如果系统经常提到错误提示,可以解释以下建议:
1.检查系统是否有特洛伊木马或病毒。这类程序为了控制系统,往往会不负责任地修改系统,导致操作系统异常。我们要时刻加强信息安全意识,千万不要对来源不明的可执行程序感到好奇。
2.更新操作系统,并让操作系统的安装程序复制正确版本的系统文件并校正系统参数。
有时候操作系统本身也会有bug。注意安装官方发布的升级程序。
3.试用该应用程序的新版本。
模式:
替换虚拟内存。
回答:
到目前为止是正的,也就是说,如果下次寒冷天气来临时没有再发生,说明是主要原因。
追加:
如果使用ghost恢复OS,建议删除所有*。PF文件放在WINDOWS\PREFetcH目录下,因为WINDOWS需要再次收集程序的物理地址。
一些应用程序错误涉及“0x7cd64998”指令中的“0x14c96730”内存。无法“读取”内存。推论就是这个原因。
来源:
Xp的“预读”技术
这种优化技术也被应用到应用软件中。系统分析每个应用软件的前几次启动,然后添加描述应用需求的虚拟“内存映像”,并将这些信息存储在WINDOWSPREFETCH数据文件夹中。一旦镜像建立,应用软件的加载速度大大提高。XP的预读数据存储最近8次系统启动或应用软件启动的信息。
后记:
目前这种方法也是一步到位的网络(它的代码查了很久),也是普遍存在的问题。本来有些程序几乎每天睡觉前关闭软件都会发生.阅读.
现在不会了。
运行某些程序时,有时会出现内存错误提示(0x后的内容可能会有所不同),然后关闭程序。
0x?'该指令引用了“0x?'记忆。无法“读取”内存。
0x?'该指令引用了“0x?'记忆,是不能‘写’的。
你遇到过这样的故障吗?
总的来说,这种现象有很多方面。一是硬件有问题,也就是内存,二是软件有很多问题。
先说硬件:
一般来说,内存出现问题的可能性不大。主要方面是:内存条坏了,内存质量有问题,两个不同品牌不同容量的内存混用,也容易出现不兼容的情况。同时也要注意散热,尤其是超频之后。可以用软件MemTest来检查内存,可以彻底检查内存的稳定性。
如果这个问题发生在你有双内存,不同品牌的内存芯片混在一起或者你买了二手内存,那么你应该检查一下内存是不是出故障了或者和其他硬件不兼容。
如果没有,则排除软件故障。
先简单说一下原理:内存中有一个存储数据的地方叫缓冲区。当一个程序把数据放到它该放的位置时,会因为空间不够而溢出。比如一个水桶只能装一斤水,当你放进两斤水的时候就会溢出来。并且该系统显示在屏幕上。这个问题经常出现在windows2000和XP系统上。Windows 2000/XP对硬件的要求非常严格。一旦遇到类似Windows 98中的资源死锁、溢出或非法操作,为了保持系统稳定,就会出现上述情况。另外,也可能是硬件设备之间兼容性差造成的。