:“0X????????指令引用的0x00000000内存,该内存不克不及为read或writ
ten”
内存出错的原因
利用Windows操做系统的人有时会碰到如许的错误信息:“0X?????
???指令引用的0x00000000内存,该内存不克不及为read或written”,然后
应用法式被封闭。
若是去请教一些“高手”,得到的答复往往是“Wind
ows就是如许不不变”之类的义愤和不屑。其实,那个错误其实不必然是W
indows不不变形成的。本文就来简单阐发那种错误的常见原因。
一、应用法式没有查抄内存分配失败
法式需要一块内存用以保留数据时
,就需要挪用操做系统供给的“功用函数”来申请,若是内存分配胜利
,函数就会将所新开拓的内存区地址返回给应用法式,应用法式就能够
通过那个地址利用那块内存。
那就是“动态内存分配”,内存地址也就
是编程中的“指针”。
内存不是永久都招之即来、用之不尽
的,有时候内存分配也会失败。当分配失败时系统函数会返回一个0值,那时返回值“0”已不暗示新启用的指针,而是系统向应用法式
发出的一个通知,告知呈现了错误。
做为应用法式,在每一次申请内存
后都应该查抄返回值能否为0,若是是,则意味着呈现了毛病,应该采
取一些办法挽救,那就加强了法式的“强健性”。
若应用程
序没有查抄那个错误,它就会根据“思维惯性”认为那个值是给它分配
的可用指针,继续在之后的运行中利用那块内存。
实正的0地址内存区
保留的是计算机系统中最重要的“中断描述符表”,绝对不允许应用程
序利用。在没有庇护机造的操做系统下(如DOS),写数据到那个地址
会招致立即死机,而在强健的操做系统中,如Windows等,那个操做会
马上被系统的庇护机造捕捉,其成果就是由操做系统强行封闭出错的应
用法式,以避免其错误扩大。
那时候,就会呈现上述的“写内存”错误
,并指出被引用的内存地址为“0x00000000”。
内存分配失
败毛病的原因良多,内存不敷、系统函数的版本不婚配等都可能有影响
。因而,那种分配失败多见于操做系统利用很长时间后,安拆了多种应
用法式(包罗无意中“安拆”的病毒法式),更改了大量的系统参数和
系统文件之后。
二、应用法式因为本身BUG引用了不一般的内存指针
在利用动态分配的应用法式中,有时会有如许的情况呈现:法式试
图读写一块“应该可用”的内存,但不知为什么,那个意料中可用的指
针已经失效了。有可能是“忘记了”向操做系统要求分配,也可能是程
序本身在某个时候已经登记了那块内存而“没有留意”等等。
登记了的
内存被系统收受接管,其拜候权已经不属于该应用法式,因而读写操做也同
样会触发系统的庇护机造,诡计“违法”的法式独一的下场就是 *** 做
末行运行,收受接管全数资本。计算机世界的法令仍是要比人类有效和严厉
得多啊!
像如许的情况都属于法式本身的BUG,你往往可在特
定的操做挨次下重现错误。
无效指针纷歧定老是0,因而错误提醒中的
内存地址也纷歧定为“0x00000000”,而是其他随机数字。
若是系统经常有所提到的错误提醒,下面的建议可能会有帮忙:
1。查看系统中能否有木马或病毒。那类法式为了控造系统往往不负
责任地修改系统,从而招致操做系统异常。
平常应加强信息平安意识,
对来源不明的可施行法式绝欠好奇。
2。更新操做系统,让操
做系统的安拆法式从头拷贝准确版本的系统文件、批改系统参数。有时
候操做系统自己也会有BUG,要留意安拆官方发行的晋级法式。
3。试用新版本的应用法式。
重启后就没事了!
若是还存在的话,一般是软件毛病,看你是不是拆了什么播放器之类的工具~
卸载或卸载后重拆即可!
经常碰到,重启软件没问题了。很简单
两种原因:1。操做系统问题形成指令读取错误!处理办法是:重启动。不可的话
把形成问题的软件删除重拆。
2。若是新加了内存呈现此问题的话有可能是假的内存。