论文部分内容阅读
最近MM小姚的电脑出现了问题:在关闭IE的时候,老是出现内存无法读取的错误。如图1所示:在经过MM把硬盘格式化、系统重新装过之后,问题却依然“涛声依旧”。
(1)
程序大意,没认清情况就向前冲
在计算机内部领域,等待处理的数据,包括常用的程序等,一般都被放在内存的某个临时一亩三分地里,这个临时存放空间被称为缓冲区(Buffer),这个缓冲区的大小,事先就已经被程序或者操作系统定义好了。所有的程序在这里排队,但一些“不自觉”的应用程序还是向前冲,把一些运行数据写到不该写的内存中,造成其他正常数据被修改,这样的操作会马上被系统“警察”(即系统保护机制)捕获,将其踢出这块领地。要知道,电脑世界的“法律机制”可要比现实世界全面、规范得多,而且执行力度更加强大。
Windows系统为防止其错误扩大,这时候,就会出现内存不能为“read”错误,并指出被引用的内存地址为“0x00000000”。就是我们常见的“0X00000000内存,该内存不能为read”的故障提示了。
程序自身故障,殃及内存
内存动态分配程序中,有时候,程序正在试图读写一块它认为可以使用的内存,但不可预知的原因导致这块领域被占领了。这个原因,既有可能是内存“忘记了”向操作系统要求分配,也可能是程序自身已经注销了这块内存领域而“忘记”。注销了的内存被系统回收,其访问权已经不属于该应用程序,因此读写操作也同样会触发系统的保护机制,企图“违法”的程序唯一的下场就是被终止运行,依旧是踢出领地。由于被占领的领地(即无效指针)不一定总是0,因此错误提示中的内存地址也不一定为“0x00000000”,而是其他随机数字。
隐藏黑手,硬件问题?
网上盛传,内存出现不能为read的提示,有很多原因是由于内存硬件出现问题导致的。一般来说,电脑硬件是很不容易坏的。当然,在购买的时候,使用MemTest软件来检测一下内存的好坏和稳定度,也是很有必要的。硬件问题不会导致内存出现不能为read的故障,实际情况通常是——直接蓝屏,或者无法启动。
真正黑手
下面,就让我们来一一见识一下真正的黑手。
黑手之一:软件是祸根
我们会经常看到某某软件又更新(或系统更新)了,但这些软件后面会注一个Beta版。如果不是特别急用新功能,我们没有必要升级,因为Beta版就是测试版的意思。这种软件往往意味着一些软件Bug可能还没有被发现,如内存泄露等等。而软件Bug也是内存故障的元凶之一。如果不是追新,我们一定要下载使用正式版的软件。
黑手之二:DLL——动态链接库失效了
在系统文件夹下,会看到许多以DLL为后缀的文件。就是所谓的DLL文件了。DLL是“Dynamic Linkable Library”(动态链接库文件)的缩写。这种文件不能单独运行,但它允许程序共享执行特殊任务所必需的代码和其他资源。在运行时,只有当EXE程序确实要调用这些DLL模块的情况下,系统才会将它们装载到内存空间中。但如果DLL文件注册失效,运行相关软件不能调用相应的DLL文件,就可能出现内存错误了。这时不妨点击“开始→运行”输入“cmd”后回车,在命令提示符下输入:
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1
立刻会出图2所示画面,这个命令会把系统文件夹下的所有动态链接库文件重新注册一下,可以修复不少错误哟。
(2)
小提示
如果你嫌输入命令麻烦,到http://work.newhua.com/cfan/200906/read.rar可以下载到处理内存不能为read问题的小工具,也能把所有的Dll文件重新注册一次。
黑手之三:低版本NET.Framework
有几位读者都在邮件来信中求助“0X000000该内存不能为read”的解决办法,后来小编发现微软的低版本NET.Framework也是祸根之一。解决方案:在“控制面板→添加/删除程序”卸载它,如果以后在其他程序需要时,可以再重新安装。或者下载高版本的NET.Framework进行升级。
(1)
程序大意,没认清情况就向前冲
在计算机内部领域,等待处理的数据,包括常用的程序等,一般都被放在内存的某个临时一亩三分地里,这个临时存放空间被称为缓冲区(Buffer),这个缓冲区的大小,事先就已经被程序或者操作系统定义好了。所有的程序在这里排队,但一些“不自觉”的应用程序还是向前冲,把一些运行数据写到不该写的内存中,造成其他正常数据被修改,这样的操作会马上被系统“警察”(即系统保护机制)捕获,将其踢出这块领地。要知道,电脑世界的“法律机制”可要比现实世界全面、规范得多,而且执行力度更加强大。
Windows系统为防止其错误扩大,这时候,就会出现内存不能为“read”错误,并指出被引用的内存地址为“0x00000000”。就是我们常见的“0X00000000内存,该内存不能为read”的故障提示了。
程序自身故障,殃及内存
内存动态分配程序中,有时候,程序正在试图读写一块它认为可以使用的内存,但不可预知的原因导致这块领域被占领了。这个原因,既有可能是内存“忘记了”向操作系统要求分配,也可能是程序自身已经注销了这块内存领域而“忘记”。注销了的内存被系统回收,其访问权已经不属于该应用程序,因此读写操作也同样会触发系统的保护机制,企图“违法”的程序唯一的下场就是被终止运行,依旧是踢出领地。由于被占领的领地(即无效指针)不一定总是0,因此错误提示中的内存地址也不一定为“0x00000000”,而是其他随机数字。
隐藏黑手,硬件问题?
网上盛传,内存出现不能为read的提示,有很多原因是由于内存硬件出现问题导致的。一般来说,电脑硬件是很不容易坏的。当然,在购买的时候,使用MemTest软件来检测一下内存的好坏和稳定度,也是很有必要的。硬件问题不会导致内存出现不能为read的故障,实际情况通常是——直接蓝屏,或者无法启动。
真正黑手
下面,就让我们来一一见识一下真正的黑手。
黑手之一:软件是祸根
我们会经常看到某某软件又更新(或系统更新)了,但这些软件后面会注一个Beta版。如果不是特别急用新功能,我们没有必要升级,因为Beta版就是测试版的意思。这种软件往往意味着一些软件Bug可能还没有被发现,如内存泄露等等。而软件Bug也是内存故障的元凶之一。如果不是追新,我们一定要下载使用正式版的软件。
黑手之二:DLL——动态链接库失效了
在系统文件夹下,会看到许多以DLL为后缀的文件。就是所谓的DLL文件了。DLL是“Dynamic Linkable Library”(动态链接库文件)的缩写。这种文件不能单独运行,但它允许程序共享执行特殊任务所必需的代码和其他资源。在运行时,只有当EXE程序确实要调用这些DLL模块的情况下,系统才会将它们装载到内存空间中。但如果DLL文件注册失效,运行相关软件不能调用相应的DLL文件,就可能出现内存错误了。这时不妨点击“开始→运行”输入“cmd”后回车,在命令提示符下输入:
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1
立刻会出图2所示画面,这个命令会把系统文件夹下的所有动态链接库文件重新注册一下,可以修复不少错误哟。
(2)
小提示
如果你嫌输入命令麻烦,到http://work.newhua.com/cfan/200906/read.rar可以下载到处理内存不能为read问题的小工具,也能把所有的Dll文件重新注册一次。
黑手之三:低版本NET.Framework
有几位读者都在邮件来信中求助“0X000000该内存不能为read”的解决办法,后来小编发现微软的低版本NET.Framework也是祸根之一。解决方案:在“控制面板→添加/删除程序”卸载它,如果以后在其他程序需要时,可以再重新安装。或者下载高版本的NET.Framework进行升级。