这是怎么回事,爱是怎么回事( 六 )



在使用动态分配的应用程序中 , 有时会有这样的情况出现:程序试图读写一块“应该可用”的内存 , 但不知为什么 , 这个预料中可用的光标已经失效了 。 有可能是 “忘记了”向操作系统要求分配 , 也可能是程序自己在某个时候已经注销了这块内存而“没有留意”等等 。 注销了的内存被系统回收 , 其访问权已经不属于该应用程序 , 因此读写操作也同样会触发系统的保护机制 , 企图“违法”的程序唯一的下场就是被操作终止执行 , 回收全部资源 。 计算机世界的法律还是要比人类有效和严厉得多啊!像这样的情况都属于程序自身的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_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\CIMOM\Autorecover MOFs

下面搜集几个例子给大家分析:

例一:IE浏览器出现“0x0a8ba9ef”指令引用的“0x03713644” 内存 , 或者“0x70dcf39f”指令引用的“0x00000000”内存 。 该内存不能为“read” 。 要终止程序 , 请单击“确定”的信息框 , 单击“确定”后 , 又出现“发生内部错误 , 您正在使用的其中一个窗口即将关闭”的信息框 , 关闭该提示信息后 , IE浏览器也被关闭 。 解决方法:

1、 开始-运行窗口 , 输入“regsvr32 actxprxy.dll”回车 , 接着会出现一个信息对话 框“DllRegisterServer in actxprxy.dll succeeded” , 确定 。 再依次运行以下命令 。 (这个方法有人说没必要 , 但重新注册一下那些.dll对系统也没有坏处 , 反正多方下手 , 能解决问题就行 。 )

regsvr32 shdocvw.dll

regsvr32 oleaut32.dll

regsvr32 actxprxy.dll

regsvr32 mshtml.dll

regsvr32 msjava.dll

regsvr32 browseui.dll

regsvr32 urlmon.dll

2、 修复或升级IE浏览器 , 同时打上系统补丁 。 看过其中一个修复方法是 , 把系统还原到系统初始的状态下 。 建议将IE升级到了6.0 。

例二:有些应用程序错误: “0x7cd64998” 指令参考的 “0x14c96730” 内存 。 该内存不能为 “read” 。 解决方法:Win XP的“预读取”技术这种最佳化技术也被用到了应用程序上 , 系统对每一个应用程序的前几次启动情况进行分析 , 然后新增一个描述套用需求的虚拟“内存映像” , 并把这些信息储存到Windows\Prefetch文件夹 。 一旦建立了映像 , 应用软件的装入速度大大提高 。 XP的预读取数据储存了最近8次系统启动或应用软件启动的信息 。 建议将虚拟内存撤换 , 删除Windows\Prefetch目录下所有*.PF文件 , 让windows重新收集程序的物理地址 。

推荐阅读