0x 03486138 0x 7 EAF 9873指令引用的内存,无法读取。这是什么问题?
使用Windows操作系统的人有时会遇到这样的错误消息:
“0X”指令指的是“0x00000000”内存,不能“读”也不能“写”,然后应用程序关闭。
如果你问一些“专家”,得到的答案往往是“Windows这么不稳定”之类的愤慨和不屑。其实这个错误不一定是Windows的不稳定造成的。本文将简单分析这个错误的一般原因。
首先,应用程序无法检查内存分配。
当一个程序需要一块内存来存储数据时,需要使用操作系统提供的“函数function”来申请。如果内存分配成功,函数会将新打开的内存区域的地址返回给应用程序,应用程序可以通过这个地址使用这个内存。这就是“动态内存分配”,内存地址也是编程中的“光标”。内存并不总是可用和取之不尽的,有时内存分配会失败。当分配失败时,系统函数将返回值0。此时,返回值“0”不再表示新启用的光标,而是系统发送给应用程序的通知,表示发生了错误。作为应用程序,应该在每次内存应用后检查返回值是否为0。如果是,则说明存在故障,需要采取一些措施来挽救,增强了程序的“健壮性”。如果应用程序不检查这个错误,它会根据“思维惯性”将这个值视为分配给它的可用游标,并在后续执行中继续使用这个内存。真正的0地址存储区存储的是计算机系统中最重要的“中断描述符表”,是绝对不允许应用程序使用的。在一个没有保护机制的操作系统中(比如DOS),向这个地址写数据会导致立即崩溃,而在一个健壮的操作系统中,比如Windows,这个操作会立即被系统的保护机制捕获,结果操作系统会强制关闭错误的应用程序,防止其错误扩大。此时会出现上述“写内存”错误,指出引用的内存地址为“0x00000000”。内存分配失败的原因有很多,比如内存不足,系统函数版本不匹配等。所以这种分配失败的情况在操作系统使用时间长了之后,在安装了多种应用程序(包括无意中安装的病毒程序)并更改了大量的系统参数和系统文件之后更为常见。
第二,应用程序由于自身的BUG引用了一个异常的内存游标。
在使用动态分配的应用程序中,有时会发生这样的情况:程序试图读写一个“应该可用”的内存,但由于某种原因,预期的可用游标已经变得无效。可能是“忘记”向操作系统要求分配,也可能是程序本身在某个时候取消了这个内存,“没注意”。注销的内存由系统回收,其访问权限不再属于应用程序。所以读写操作也会触发系统的保护机制,企图“违法”的程序唯一的最终结果就是被操作终止,收回所有资源。计算机世界的法则还是比人类有效和严厉得多!像这样的情况属于程序本身的BUG,你经常可以在一个特定的操作序列中重现错误。无效光标不一定是0,所以错误提示中的内存地址不一定是“0x00000000”,也可以是其他随机数。如果系统经常出现上述错误提示,可以解释以下建议:
1.检查系统中是否有特洛伊病毒。这种程序经常不负责任地修改系统,以便控制系统。
导致操作系统异常。平时要加强信息安全意识,千万不要对来源不明的可执行程序感到好奇。
2.更新操作系统,使操作系统的安装程序能够复制正确版本的系统文件并修正系统参数。
有时候操作系统本身也有bug,要注意安装官方发布的升级程序。
3.尝试应用程序的新版本。