0X????????"指令引用的0x????????内存,该内存不能"written"或"read".
. S: V. z* k0 r然后无论你点击"确定"还是"取消",应用程序都会被关闭.5 S/ t! J( G% j/ l# T& |
2 r# Z6 I% m" t: W! G/ L: O' E) }大多数人以为是"Windows就是这样不稳定".其实,这个错误并不一定就是XP不稳定造成的.; b. {& ^; r( t& q& J2 g- p
( t) A$ L# n0 R* @1 Z下面就分析下这个问题的成因:
& M3 c. f( Z8 W1 r% N; K1 |) Y. ^一 应用程序没有检查内存分配失败
1 s! ]# O6 T% w/ S
2 B; C$ B; E3 }3 b9 g 程序需要一块内存用以储存数据时,就需要使用操作系统提供的[功能函数]来申请.
Q1 @$ u9 B. o/ x- x( O
- l8 R z! _9 Q n* \ 如果内存分配成功,函数就会将所新开辟的内存区地址返回给应用程序.
. h+ ]* K% f. i; T) e
4 G5 f# q5 y9 W0 e0 u2 A 应用程序就可以通过这个地址使用这块内存.这就是[动态内存分配],
' d, U% t/ g( N$ y j0 j4 N( Z
/ E1 O" c2 D% X 内存地址也就是编程中的[光标].; ] M0 P+ [: {# z# o* f. b0 I
3 L) X" N6 v7 ]; @7 H0 h- w
内存不是永远都招之即来、用之不尽的,有时候内存分配也会失败.
+ H; x( b# Z8 I, K0 O' E
9 p2 F# P, R, E$ C i0 R 当分配失败时系统函数会返回一个[0]值,这时返回值[0]已不表示新启用的游标,1 M; ~1 ~! y- o6 x2 L
* [* Z9 Y5 D* J& j: R
而是系统向应用程序发出的一个通知,告知出现了错误.作为应用程序,0 }$ N, b% x+ e) L3 q
3 o* d+ p B) F: l
在每一次申请内存后都应该检查返回值是否为0,如果是,则意味着出现了故障,2 g- l; U0 o S- s9 K
) z5 k. f0 h/ g M% C
应该采取一些措施挽救,这就增强了程序的[健壮性].
+ g' ^) ~( n' E2 U, r0 l: J! i. s) s P4 L0 M# w4 A: f- Z
若应用程序没有检查这个错误,它就会按照[思维惯性]认为这个值是给它分配的可用游标, L; Z( ~+ W4 E4 Q+ ~5 }
' \ O. Z. N9 ^* P, V' ^' [( m$ `! i 继续在之后的执行中使用这块内存.
0 u! N/ j) D" r1 L
3 b, g4 I/ y3 }5 D9 V3 o; d3 X 真正的[0]地址内存区储存的是计算机系统中最重要的[中断描述符表],
1 Y: ]0 L' F6 y9 \# B* E9 G! j6 q7 h! N4 h v1 J
绝对不允许应用程序使用.在没有保护机制的操作系统下(DOS),4 T+ H! R9 n* S( B% j4 C2 C
1 i( E! A. s8 b 写数据到这个地址会导致立即死机,而在健壮的操作系统中,(XP)
( B5 O! Q" Y- a0 n6 h. T$ p1 \
$ X' |0 Q; |5 q 这个操作会马上被系统的保护机制捕获,其结果就是由操作系统强行关闭出错的应用程序,; g4 q, {! ~! ?; L
. o2 R* n* C! Z" ~; u# _- T
以防止其错误扩大.这时候,就会出现上述的[写内存]错误,
0 o+ }* F6 k. ]8 [+ B7 u2 D* d/ ?5 Z5 X5 I* Z( `: B
并指出被引用的内存地址为[0x????????].# {; w2 F% o7 V! j9 e) A! }
4 a7 D$ t% c' e" j5 Q! K% H
内存分配失败故障的原因很多,内存不够、系统函数的版本不匹配等都可能有影响.
3 j r! a9 u1 L5 E# y J& `! M& Q y5 K2 P, H
因此,这种分配失败多见于操作系统使用很长时间后,
# s0 z( ^ m6 y2 W f) r) [4 Y9 V! y" K7 v: M
安装了多种应用程序(包括无意中[安装]的程序),更改了大量的系统参数和系统档案之后.( S4 B2 U% h. B8 a( w+ a# }2 v* p% |, }
# K! ~0 ?3 J- J' _ L: Y: Z二 应用程序由于自身漏洞引用了不正常的内存光标, Y8 K- K- w7 L
0 t: V! j+ `) ?( |2 ^7 {# K 在使用动态分配的应用程序中,有时会有这样的情况出现:程序试突读写一块[应该可用]的内存,/ C/ w5 Z* Z' e0 a( U
. |" \) k* F/ } 但不知为什么,这个预料中可用的光标已经失效了.有可能是[忘记了]向操作系统要求分配,# v! v9 E* _$ W% \2 M: k
* `5 n; ?" t( n8 d5 k 也可能是程序自己在某个时候已经注销了这块内存而[没有留意]等等.- S7 W( Z7 Z1 R3 R( ]
" M6 _% l: q9 B$ { u8 b
注销了的内存被系统回收,其访问权已经不属于该应用程序,
# N& G5 ~8 |, Z8 \, b) e+ _, U9 \: K. |4 h2 ?- ]
因此读写操作也同样会触发系统的保护机制,企图[违法]的程序唯一的下场就是被操作终止执行,
5 G, w2 h* P! ?# X! X5 C0 t0 V+ d
回收全部资源.计算机世界的法律还是要比人类有效和严厉得多啊!* d2 n* g0 }2 S6 I+ s4 Z% H1 G
) p3 i* R; ~: W2 |' x( n
像这样的情况都属于程序自身的BUG,你往往可在特定的操作顺序下重现错误.9 m9 }/ N5 e- z5 k
. x; v4 z- @" M7 e9 V& Z8 C
无效光标不一定总是[0],因此错误提示中的内存地址也不一定为[0x????????],
! O9 Z( u& G. Q, i6 N/ E- i/ n
. d. j; t0 f" s+ m6 F! j 而是其它随机数字./ f. j/ D9 q$ M; Z% @9 b
# F! ~1 \9 t9 D2 F* }三 如果你用Ghost恢复系统后建议删除WINDOWS\PREFETCH目录下所有*.PF文件
7 a/ Y7 l8 `9 K
O1 Y! D/ x- d6 s. @ 因为它们要让系统重新收集程序的物理地址0 R% x+ R/ o4 @6 \- E: m1 H
6 F% B, ~5 ?( f( d
有些应用程序错误: "0x7cd64998" 指令参考的 "0x14c96730" 内存.该内存不能为 "read"
0 I f4 U$ k5 V2 w7 Y/ p+ m
* R R9 W. X j; k+ l" G# r5 [ 8成应该就是这个原因,它来自XP的[预读取]技术
6 P7 ~: I9 R% B s/ c0 k( }/ ]8 q l# w- |" A: @1 _0 h
这种最佳化技术也被用到了应用软件上,系统对每一个应用软件的前几次启动情况进行分析,* l4 g V, m4 i! t& U
: X' X# q+ z: s1 k
然后新增一个描述套用需求的虚拟[内存映像],并把这些信息储存到WINDOWS\PREFETCH目录下.
9 T1 A) h! G! s" M; o7 I; G0 x D" k8 K4 V: f0 U
一旦建立了映像,应用软件的装入速度大大提高.. T; v& Y; r q! a2 d
4 e( k) O8 C/ I& | XP的预读取数据储存了最近8次系统启动或应用软件启动的信息.
1 i5 r5 S3 v. [1 L7 y: V5 ]2 I4 V
; B e# A! C9 Y7 L+ t" Q8 q( F例子:5 M, F4 @* Z6 J% [9 K
01 打开IE浏览器或者没过几分钟就会出现"0x70dcf39f"指令引用的"0x00000000"内存.该内存不能为"read".要终止程序,请单击"确定"的信息框,单击"确定"后,又出现"发生内部错误,您正在使用的其中一个窗口即将关闭"的信息框,关闭该提示信息后,IE浏览器也被关闭.
3 `5 V% S+ m! y3 _0 r# \解决方法:修复或升级IE浏览器,同时打上补丁.[IE6.0][注意流氓软件]
2 ~$ h+ y6 | K. w" ~. ^& r
5 }8 b3 \2 L; Q( Z4 `+ j# a02 xp下双击光盘里面的"AutoRun.exe"文件,显示"0x77f745cc"指令引用的"0x00000078"内存.该内存不能为"written",要终止程序,请单击"确定",而在2003里运行却正常. ) a8 A6 w! e! j; {9 U9 a
解决方法:这可能是系统的兼容性问题,XP的系统,右键"AutoRun.exe"文件,属性,兼容性,把"用兼容模式运行这个程序"项选择上.
# S6 w/ E9 K$ p0 }9 J. T8 G8 I q( [: |% n3 E
03 播放器关闭时出现错误,以前一直使用正常,最近却在每次关闭时出现"0x????????"指令引用的"0x????????"内存.该内存不能为"read" 的提示.
* i, z; Q _1 O. f' Q3 U4 _* J) r解决方法:当使用的输入法为微软拼音输入法,并且隐藏语言栏时(不隐藏时没问题)关闭播放器时,就有可能会出现这个问题,因此在关闭播放器之前,可以换个输入法来解决这个问题. + _& t R4 {( V' T# p5 m+ r
. o6 l: X8 @' K) m& B04 豪杰超级解霸自从上网后就不能播放了,每次都提示"0x060692f6"(每次变化)指令引用的"0xff000011"内存不能为"read",终止程序请按确定.
. z. n7 ^( K, g' g8 _解决方法:试试重装豪杰超级解霸,如果重装后还会,到官方网站下载最新版本.最好使用其他的播放器.[KMPlayer] 5 m! _3 M: z2 O% L
( L! t) T$ [, y; `+ ?5 y05 双击一个游戏的快捷方式,"0x77f5cd0"指令引用"0x????????"内存,该内存不能为"read" ,并且提示Client.dat程序错误.
& [, M# Q& ~7 _解决方法:重装显卡的最新驱动程序,然后下载并且安装DirectX9.0c. ) N+ _( F5 `; \& s+ [* a
3 _7 ]" U+ b7 `- g c5 [2 J( _
06 朋友从QQ发信息过来,便出现了错误信息:"0x772b548f"指令引用的"0x00303033"内存,该内存不能为"written",然后QQ自动下线,而再打开QQ,发现他发过来的十几条的信息. 2 R2 C7 I$ o& ~5 l# ?
解决方法:这是对方利用QQ的漏洞,发送特殊的代码,让QQ出错,升级到最新版本.; S7 |; }% x0 L# n. n
# L, O T ]$ Y* Q
综合解决方法
, q! M3 M, u6 s7 F01 内存条坏了 更换内存条
: U6 J- S4 z: d: y+ \- K02 双内存不兼容 使用同品牌的内存或只要一条内存
/ r- x' c, f' {% [1 \0 N) @& s03 内存质量问题 更换内存条6 E0 W3 n2 q9 B! g" K
04 散热问题 加强机箱内部的散热 [注意定期除尘]/ j# H- u! e% J2 e9 F. v% j
05 内存和主板没插好或其他硬件不兼容 重插内存或换个插槽
k5 j1 B6 h0 n& f: T/ [. ^06 硬件有问题 最好定期用软件修复一下磁盘坏道,但要注意备份文件 [XP自带的磁盘工具]7 y5 f& W* Q2 Y6 S& R3 ?
07 驱动问题 重装驱动 最好装最新版本的驱动* T: {, L, U* L. p" @
08 软件损坏 重装软件
0 e8 _+ B1 X* k( @" E09 软件有漏洞 打补丁或更新到最新版本 [使用正式版,不带beta的那种], b9 N( [; m3 \( u
10 软件和系统不兼容 给软件打上补丁或是试试系统的兼容模式7 J0 E' d8 |- y: L. ?! I
11 软件和软件之间有冲突 如果最近安装了什么新软件.[卸载]4 x9 `8 [* h4 ?
12 病毒问题 杀毒[NOD32 麦咖啡 小红伞]
, U: |/ N/ d, U/ U3 K/ j! m13 杀毒软件与系统或软件相冲突 由于杀毒软件是进入底层监控系统的,可能与一些软件相冲突.
! d: b- U# n6 N4 q; z, \- }3 S14 系统本身有问题 有时候操作系统本身也会有漏洞,要注意安装官方发行的更新程序,而且要注意系统的简洁性,一些软件会自动添加右键什么的.要定期用软件修复.[360安全卫士]
7 O- U! J# g3 L: s/ j
+ P& _: G! a. u你是否安装了微软NET.Framework,如果已经安装了,可以考虑卸载它,当然如果你以后在其它程序需要NET.Framework时候,可以再重新安装.. U1 @1 l# F8 f
如果你用的是ATI显卡并且你用的是SP2的补丁,一些ATI的显卡驱动需要在NET.Framework正常工作的环境下.这种情况你可以找一款不需要NET.Framework支持的ATI显卡驱动. [NET.Framework2.0/3.5]
# R2 g s( H i3 k9 ]; e4 n! P& {3 ~3 l- N5 X
开始--运行:for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1
: X$ V0 I8 j1 b7 v0 o) N4 q* j回车后,等一会[需要点时间1-2分钟]" a/ G" k1 t8 H* ~ ~
8 ^3 k* ^7 N* v3 z2 H
进入注册表,在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks下,应该只有一个正常的键值"{AEB6717E-7E19-11d0-97EE-00C04FD91972},将其他的删除. |
|