用Windows操作系统的人有时会遇到这样的错误信息:“0X????????指令引用的0x00000000内存,该内存不能written”,然后应用程序被关闭。如果去请教一些“高手”,得到的回答往往是“Windows就是这样不稳定”之类的义愤和不屑。其实,这个错误并不一定是Windows不稳定造成的。本文就来简单分析这种错误的常见原因。

一、应用程序没有检查内存分配失败
程序需要一块内存用以保存数据时,就需要调用操作系统提供的“功能函数”来申请,如果内存分配成功,函数就会将所新开辟的内存区地址返回给应用程序,应用程序就可以通过这个地址使用这块内存。这就是“动态内存分配”,内存地址也就是编程中的“指针”。
内存不是永远都招之即来、用之不尽的,有时候内存分配也会失败。当分配失败时系统函数会返回一个0值,这时返回值“0”已不表示新启用的指针,而是系统向应用程序发出的一个通知,告知出现了错误。作为应用程序,在每一次申请内存后都应该检查返回值是否为0,如果是,则意味着出现了故障,应该采取一些措施挽救,这就增强了程序的“健壮性”。
若应用程序没有检查这个错误,它就会按照“思维惯性”认为这个值是给它分配的可用指针,继续在之后的运行中使用这块内存。真正的0地址内存区保存的是计算机系统中最重要的“中断描述符表”,绝对不允许应用程序使用。在没有保护机制的操作系统下(如DOS),写数据到这个地址会导致立即死机,而在健壮的操作系统中,如Windows等,这个操作会马上被系统的保护机制捕获,其结果就是由操作系统强行关闭出错的应用程序,以防止其错误扩大。这时候,就会出现上述的“写内存”错误,并指出被引用的内存地址为“0x00000000”。
内存分配失败故障的原因很多,内存不够、系统函数的版本不匹配等都可能有影响。因此,这种分配失败多见于操作系统使用很长时间后,安装了多种应用程序(包括无意中“安装”的病毒程序),更改了大量的系统参数和系统文件之后。
二、应用程序由于自身BUG引用了不正常的内存指针
在使用动态分配的应用程序中,有时会有这样的情况出现:程序试图读写一块“应该可用”的内存,但不知为什么,这个预料中可用的指针已经失效了。有可能是“忘记了”向操作系统要求分配,也可能是程序自己在某个时候已经注销了这块内存而“没有留意”等等。注销了的内存被系统回收,其访问权已经不属于该应用程序,因此读写操作也同样会触发系统的保护机制,企图“违法”的程序唯一的下场就是被操作终止运行,回收全部资源。计算机世界的法律还是要比人类有效和严厉得多啊! 像这样的情况都属于程序自身的BUG,你往往可在特定的操作顺序下重现错误。无效指针不一定总是0,因此错误提示中的内存地址也不一定为“0x00000000”,而是其他随机数字。
如果系统经常有所提到的错误提示,下面的建议可能会有帮助:
1.查看系统中是否有木马或病毒。这类程序为了控制系统往往不负责任地修改系统,从而导致操作系统异常。平常应加强信息安全意识,对来源不明的可执行程序绝不好奇。
2.更新操作系统,让操作系统的安装程序重新拷贝正确版本的系统文件、修正系统参数。有时候操作系统本身也会有BUG,要注意安装官方发行的升级程序。
3.试用新版本的应用程序。

运行某些程序的时候,有时会出现内存错误的提示,然后该程序就关闭。

“0x????????”指令引用的“0x????????”内存。该内存不能为“read”。

“0x????????”指令引用的“0x????????”内存,该内存不能为“written”。

不知你出现过类似这样的故障吗?(0x后面内容有可能不一样。)

一般出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件,这就有多方面的问题了。

下面先说说硬件:

一般来说,内存出现问题的可能性并不大,主要方面是:内存条坏了、内存质量有问题,还有就是2个不同牌子不同容量的内存混插,也比较容易出现不兼容的情况,同时还要注意散热问题,特别是超频后。你可以使用MemTest 这个软件来检测一下内存,它可以彻底的检测出内存的稳定度。

假如你是双内存,而且是不同品牌的内存条混插或者买了二手内存时,出现这个问题,这时,你就要检查是不是内存出问题了或者和其它硬件不兼容。如果都没有,那就从软件方面排除故障了。

先简单说说原理:内存有个存放数据的地方叫缓冲区,当程序把数据放在其一位置时,因为没有足够空间,就会发生溢出现象。举个例子:一个桶子只能将一斤的水,当你放入两斤的水进入时,就会溢出来。而系统则是在屏幕上表现出来。这个问题,经常出现在windows2000和XP系统上,Windows 2000/XP对硬件的要求是很苛刻的,一旦遇到资源死锁、溢出或者类似Windows 98里的非法操作,系统为保持稳定,就会出现上述情况。另外也可能是硬件设备之间的兼容性不好造成的。

内存不能read written常见原因相关推荐

  1. C++内存泄露几种常见原因

    在cpp编程中,产生内存泄漏的主要原因是利用malloc或者new等分配内存的方式申请内存后,由于主观或者客观原因没有进行释放,导致申请的内存区域没有及时得到释放导致的. 下面对几种常见/特殊的情况进 ...

  2. 0x00000090 - 该内存不能read written

    该内存不能read written常见原因 使用Windows操作系统的人有时会遇到这样的错误信息:"0X????????指令引用的0x00000000内存,该内存不能written&quo ...

  3. 内存泄露从入门到精通三部曲之常见原因与用户实践

    2019独角兽企业重金招聘Python工程师标准>>> 内存泄露从入门到精通三部曲之常见原因与用户实践 腾讯Bugly特约作者: 姚潮生 常见原因 1.集合类 集合类如果仅仅有添加元 ...

  4. 0x7c97cdf2指令引用的0x00000014内存。该内存不能为”written

    该内存不能read 或written数值 叙述 0 0x0000 作业完成. 1 0x0001 不正确的函数. 2 0x0002 系统找不到指定的档案. 3 0x0003 系统找不到指定的路径. 4 ...

  5. Android 导致OOM的常见原因

    OOM主要有两种原因导致: 1. 加载大图片: 2. 内存泄漏: 一.加载大图片 在Android应用中加载Bitmap的操作是需要特别小心处理的,因为Bitmap会消耗很多内存.比如,Galaxy ...

  6. javaheapspace解决方案_高手总结的9种 OOM 常见原因及解决方案

    当 JVM 内存严重不足时,就会抛出 java.lang.OutOfMemoryError 错误.本文总结了常见的 OOM 原因及其解决方法,如下图所示.如有遗漏或错误,欢迎补充指正. 1.Java ...

  7. mysql-nt.exe w3wp.exe cpu 100%_w3wp.exe(IIS ) CPU 占用 100% 的常见原因及解决办法

    对于IIS管理员来说,经常会碰到Web服务器CPU占用100%的情况,以下是个人的日常工作总结和一些解决办法,主要用来剖析w3wp.exe(IIS )占用CPU 100%的一些原因 和解决方案,希望能 ...

  8. erp故障处理流程图_PLC故障常见原因及处理方法!

    欢迎关注"热控圈 " ID:rekongquan 传播热控知识,分享技术精华! 第一部分.运行中PLC故障常见原因及处理方法 (一).外围电路元器件故障 此类故障在PLC工作一定时 ...

  9. c++堆栈溢出怎么解决_StackOverFlowError 常见原因及解决方法

    点击上方"IT牧场",选择"设为星标" 技术干货每日送达! 每一个 JVM 线程都拥有一个私有的 JVM 线程栈,用于存放当前线程的 JVM 栈帧(包括被调用函 ...

最新文章

  1. 戴尔/Dell R420服务器在 CentOS 5.6 64bit环境下安装网卡驱动
  2. 张钹院士:制约人工智能发展的最大困难是什么?
  3. Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明
  4. CentOS安装rpm包时遇到Header V3 DSA signature: NOKEY时解决办法
  5. 大数据架构如何挑选机器.
  6. 三种获取Class类型的实例的方法
  7. 实例17:python
  8. 《STL源码剖析》相关面试题总结
  9. 什么是代码调试(debugging)?进行代码调试的基本方法有哪些?
  10. 【贪心】【高精度】zoj3987 Numbers
  11. leetcode - Minimum Depth of Binary Tree
  12. 美妆海报模板|来点创意的海报设计(立体剪纸风格)
  13. 回溯法解决0-1背包问题
  14. System.Configuration.ConfigurationErrorsException:“配置系统未能初始化”
  15. SQL计算日环比、周同比
  16. 上楼梯(递归和迭代的对比)
  17. 异步下载小说《诡秘之主》
  18. js 数组去重、扁平化函数
  19. 虚拟主机管理器WHM的详细介绍
  20. Flowable6.8(6.x版本通用)整合集成达梦8数据库(DM8)详解,解决自动生成表时dmn相关表语法报错问题。

热门文章

  1. html同时播放多个文件夹,ios – 如何同时播放多个音频文件
  2. C++中 对》和《的重载
  3. python中输出某段文字_怎样用Python提取文本中某一段文字
  4. 2017年编程语言排行榜
  5. 我见过最牛X的程序员应聘者!
  6. 利用Python渗透实现沙箱逃逸,看黑客是如何绕过网站的防护的?
  7. 软件学报投稿的大致时间线分享
  8. wireshark域名过滤
  9. mastercam2017后处理升级_如何升级Mastercam 9.1版后处理?
  10. 最强的数据扩增方法竟然是添加标点符号?