[软件应用] 转贴:内存不能read或者written的解决方案

chenlee04 发布于2007-12-30 08:44 2365 次浏览 7 位用户参与讨论   [复制分享主题]
0X????????"指令引用的0x????????内存,该内存不能"written"或"read".
; @: W) x% T- C- b然后无论你点击"确定"还是"取消",应用程序都会被关闭.' A  V/ L6 H9 m4 Y# K6 `* @* L
5 \  E9 K& s" [% U- Z
大多数人以为是"Windows就是这样不稳定".其实,这个错误并不一定就是XP不稳定造成的., }6 q7 N+ w% i2 T5 b8 ]) g
7 m% \& I% v9 X
下面就分析下这个问题的成因:
# ^$ C$ b4 C0 K一   应用程序没有检查内存分配失败
$ L2 J( \# C5 o% d4 @
/ `/ u- y) ^- I( N" _2 s      程序需要一块内存用以储存数据时,就需要使用操作系统提供的[功能函数]来申请.
/ X2 |+ l; G# ]( p7 C# d
8 Q1 ?, q4 ^2 K0 ]      如果内存分配成功,函数就会将所新开辟的内存区地址返回给应用程序.1 O8 e8 z& a9 b
3 R% d, h( R3 W- v: Z$ {" t
      应用程序就可以通过这个地址使用这块内存.这就是[动态内存分配],* u# Y  ?; Y9 M, `/ ~5 c* I" X
* L  h7 p" r  j' O, r3 ^, h0 ?
      内存地址也就是编程中的[光标]./ h7 h5 q" E7 |$ Y+ ~
5 b" `3 G5 s" J0 d9 W
      内存不是永远都招之即来、用之不尽的,有时候内存分配也会失败.0 q1 m9 T5 L6 F' ^5 ^+ ]  k0 g
& n# I; h6 A  P& f1 q
      当分配失败时系统函数会返回一个[0]值,这时返回值[0]已不表示新启用的游标,0 P9 y% w+ l# \& K% u/ ?

- v1 n* {) Y0 Z, i3 a, \$ A      而是系统向应用程序发出的一个通知,告知出现了错误.作为应用程序,! }+ ?' E! t) k6 a0 v. d$ e- G
; H- t0 a/ R% W* ]4 H6 u
      在每一次申请内存后都应该检查返回值是否为0,如果是,则意味着出现了故障,
3 c  T0 o/ F; D% B, v* k
8 Q0 j* a' G; Q0 y4 Z; @      应该采取一些措施挽救,这就增强了程序的[健壮性].
, s& i1 s) Q: n0 y" l; F  o
6 t0 y* G& W) I8 S6 N+ Z) n      若应用程序没有检查这个错误,它就会按照[思维惯性]认为这个值是给它分配的可用游标,9 E/ C( V. f, L

9 ?2 U# a2 f+ i) A3 F      继续在之后的执行中使用这块内存." _" o4 K! C) k( ]) o
# v+ L0 G3 X8 E5 O+ P$ t
      真正的[0]地址内存区储存的是计算机系统中最重要的[中断描述符表],
, }2 S4 _% h8 A3 W3 c! q' D; Z! u& u/ h: M9 T% {# d
      绝对不允许应用程序使用.在没有保护机制的操作系统下(DOS),
" T: l; o# F, L+ M; a/ \, p, {  y- L
      写数据到这个地址会导致立即死机,而在健壮的操作系统中,(XP)# t7 n, i( ~  m
5 Q6 C" e2 f/ U7 X
      这个操作会马上被系统的保护机制捕获,其结果就是由操作系统强行关闭出错的应用程序,3 v6 ]7 y; _0 j+ \2 T
3 F! Y* l3 U( `/ \' @+ e% r
      以防止其错误扩大.这时候,就会出现上述的[写内存]错误,6 s. _2 l/ U5 H! G
' [- Q; e* s/ \1 \9 N9 K
      并指出被引用的内存地址为[0x????????].0 M( y6 J+ V+ m, ?+ I; I5 _# f

9 O1 E+ b7 F1 f. u$ v1 O      内存分配失败故障的原因很多,内存不够、系统函数的版本不匹配等都可能有影响.
; v# e" V/ ?5 \( E
( w/ v5 W- e4 i( X      因此,这种分配失败多见于操作系统使用很长时间后,. {1 ]( o/ X+ [& V4 z

1 _% f' C; Q6 ~5 |1 J9 R% z      安装了多种应用程序(包括无意中[安装]的程序),更改了大量的系统参数和系统档案之后.8 x! ^8 ^( i( z7 \, A
% g! f8 ]  U/ h8 X1 i0 V& Y+ a
二   应用程序由于自身漏洞引用了不正常的内存光标9 Y* K' w! b3 N! w) U
3 T7 z6 o4 a& U8 f' z, ~% ]6 e
      在使用动态分配的应用程序中,有时会有这样的情况出现:程序试突读写一块[应该可用]的内存,
, Y" ?& @1 J% W* ^8 Y
) Q; l( K" p  @& C/ H; X6 h      但不知为什么,这个预料中可用的光标已经失效了.有可能是[忘记了]向操作系统要求分配,
5 C2 @: a' @, c. y$ l. g2 X& X6 [5 e) m( {& O( t, Z; V
      也可能是程序自己在某个时候已经注销了这块内存而[没有留意]等等.# c% }# t6 O8 l0 F, _
, R! |0 k7 k- y( t
     注销了的内存被系统回收,其访问权已经不属于该应用程序,1 d4 S0 U$ G" f0 K, N, r5 W6 h# }

; w! s: @& D( I- `" R! l2 [% V7 q     因此读写操作也同样会触发系统的保护机制,企图[违法]的程序唯一的下场就是被操作终止执行,  n7 Q* e0 ^5 k( Z1 o: ~: y9 J1 o

& S3 h% H& q* a9 T' f+ e     回收全部资源.计算机世界的法律还是要比人类有效和严厉得多啊!: I; I" E% _' w" n

2 W: W- j( X( A; ^* E& b, E9 H0 d     像这样的情况都属于程序自身的BUG,你往往可在特定的操作顺序下重现错误.9 l) Z; A; J1 q9 f  E4 g7 d4 ^) D

! B- d6 A7 p2 O     无效光标不一定总是[0],因此错误提示中的内存地址也不一定为[0x????????],( z& ?9 g5 J; d; r

( H+ @- K% k3 s2 S     而是其它随机数字.
- L; L$ K; P; M' y/ n7 o% i! J8 z3 ^( W9 L
三  如果你用Ghost恢复系统后建议删除WINDOWS\PREFETCH目录下所有*.PF文件
1 v3 b5 D0 L& Z9 ^/ Q0 P# C3 {" A3 ?6 E; {" L$ g9 L* q
     因为它们要让系统重新收集程序的物理地址
' Y0 k3 F  F5 I4 l
# M0 \. d" p, `& y* u$ m     有些应用程序错误: "0x7cd64998" 指令参考的 "0x14c96730" 内存.该内存不能为 "read"" b! N4 F6 k5 V7 A- d, y) J/ P+ ]
1 y+ s  M0 E1 F9 V- J2 F$ ?
     8成应该就是这个原因,它来自XP的[预读取]技术2 }* \9 d/ \# Z  v+ J3 C4 }. h3 V
: M/ M6 T: E5 ]$ m  w5 o
     这种最佳化技术也被用到了应用软件上,系统对每一个应用软件的前几次启动情况进行分析,
7 L7 E, u9 U9 V1 e  x$ B9 U
; e  k4 B9 ~% ?) T" w# C& A     然后新增一个描述套用需求的虚拟[内存映像],并把这些信息储存到WINDOWS\PREFETCH目录下.! b( @9 p; K3 Y* K! b, q/ `) S

8 C% Q' h3 J/ s% @     一旦建立了映像,应用软件的装入速度大大提高.! A9 O. x2 \5 ]3 u1 n2 n0 e1 p
0 A0 K; n! P6 U7 b
     XP的预读取数据储存了最近8次系统启动或应用软件启动的信息.& O" R; J0 G3 l

1 {  D, o0 S+ R# L+ _6 o* t例子:! ~& _+ U& q0 C  o7 C( R
01 打开IE浏览器或者没过几分钟就会出现"0x70dcf39f"指令引用的"0x00000000"内存.该内存不能为"read".要终止程序,请单击"确定"的信息框,单击"确定"后,又出现"发生内部错误,您正在使用的其中一个窗口即将关闭"的信息框,关闭该提示信息后,IE浏览器也被关闭.
+ d1 b& c0 `  m. H6 q' |* `) G解决方法:修复或升级IE浏览器,同时打上补丁.[IE6.0][注意流氓软件]
' M0 u: D6 y1 F; N" u& R, O2 Q$ y
02 xp下双击光盘里面的"AutoRun.exe"文件,显示"0x77f745cc"指令引用的"0x00000078"内存.该内存不能为"written",要终止程序,请单击"确定",而在2003里运行却正常. 8 P7 D% ]2 r  q; y
解决方法:这可能是系统的兼容性问题,XP的系统,右键"AutoRun.exe"文件,属性,兼容性,把"用兼容模式运行这个程序"项选择上.
2 T$ u5 P. c0 E8 n5 c; w4 i
+ _# j. q/ B8 M. k4 N0 P03 播放器关闭时出现错误,以前一直使用正常,最近却在每次关闭时出现"0x????????"指令引用的"0x????????"内存.该内存不能为"read" 的提示. 4 S7 O! h6 x( s( s
解决方法:当使用的输入法为微软拼音输入法,并且隐藏语言栏时(不隐藏时没问题)关闭播放器时,就有可能会出现这个问题,因此在关闭播放器之前,可以换个输入法来解决这个问题.
: {! w/ r; _+ B- d6 ^* s% S+ f+ Z3 t" q( l
04 豪杰超级解霸自从上网后就不能播放了,每次都提示"0x060692f6"(每次变化)指令引用的"0xff000011"内存不能为"read",终止程序请按确定.
: k& a* b" P/ J9 j0 r- Z6 q解决方法:试试重装豪杰超级解霸,如果重装后还会,到官方网站下载最新版本.最好使用其他的播放器.[KMPlayer] ' k* f. I' n! r6 Y4 y4 B& n

* z" w  C& |% G  Y/ b5 x  h05 双击一个游戏的快捷方式,"0x77f5cd0"指令引用"0x????????"内存,该内存不能为"read" ,并且提示Client.dat程序错误.
1 H& Y) ?9 t, j. r7 }解决方法:重装显卡的最新驱动程序,然后下载并且安装DirectX9.0c.
) q' ~! h8 ]2 V/ H. ~* j, ?
4 u1 ?; D# ^8 D, q* c( G1 Q06 朋友从QQ发信息过来,便出现了错误信息:"0x772b548f"指令引用的"0x00303033"内存,该内存不能为"written",然后QQ自动下线,而再打开QQ,发现他发过来的十几条的信息. 0 \9 m* ~* j7 }  M
解决方法:这是对方利用QQ的漏洞,发送特殊的代码,让QQ出错,升级到最新版本./ [. V" a: E, k2 A$ s6 P  a2 W1 M

/ i9 x* \& a5 |# y) w! U$ e综合解决方法7 U( o% \. S3 ?$ A2 }% Y
01 内存条坏了 更换内存条
" d4 C7 p7 W* d) Z# x  o02 双内存不兼容 使用同品牌的内存或只要一条内存5 f9 y( K) b$ M0 T6 |; f+ `" Q, i* c
03 内存质量问题 更换内存条
+ P) J- V- C) m) v04 散热问题 加强机箱内部的散热 [注意定期除尘]: Q4 H/ s$ d3 X* K2 c4 {
05 内存和主板没插好或其他硬件不兼容 重插内存或换个插槽& F% Y2 t9 V: B8 o" G& Z# s# _
06 硬件有问题 最好定期用软件修复一下磁盘坏道,但要注意备份文件 [XP自带的磁盘工具]( [! s+ T/ S% h0 s
07 驱动问题 重装驱动 最好装最新版本的驱动
, N! i4 J* Z: j4 }. G/ c* x08 软件损坏 重装软件$ t1 ]/ {% G; K7 N4 S  `
09 软件有漏洞 打补丁或更新到最新版本 [使用正式版,不带beta的那种]6 y% F; L6 w0 K6 ], h4 m
10 软件和系统不兼容 给软件打上补丁或是试试系统的兼容模式
5 A5 m8 x; p/ w* a  P  c5 D11 软件和软件之间有冲突 如果最近安装了什么新软件.[卸载]
- ^, J6 a$ v2 ?; x' a12 病毒问题 杀毒[NOD32 麦咖啡 小红伞]
+ F+ `# b$ M9 C: J" y13 杀毒软件与系统或软件相冲突 由于杀毒软件是进入底层监控系统的,可能与一些软件相冲突.1 `7 v, \- n2 b* e0 S. P. N" O/ G% Z
14 系统本身有问题 有时候操作系统本身也会有漏洞,要注意安装官方发行的更新程序,而且要注意系统的简洁性,一些软件会自动添加右键什么的.要定期用软件修复.[360安全卫士]( R! y4 M/ [+ A7 E- l0 Q
, _1 J2 s8 M+ R$ \
你是否安装了微软NET.Framework,如果已经安装了,可以考虑卸载它,当然如果你以后在其它程序需要NET.Framework时候,可以再重新安装.
6 h$ J" s$ N6 J" L9 C! k  @2 J, p如果你用的是ATI显卡并且你用的是SP2的补丁,一些ATI的显卡驱动需要在NET.Framework正常工作的环境下.这种情况你可以找一款不需要NET.Framework支持的ATI显卡驱动. [NET.Framework2.0/3.5]9 N, w6 p9 K9 K

: H+ @  S' m0 C8 I% Z- z4 Y, |开始--运行:for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %13 o' r! Z0 H. ^( |/ K
回车后,等一会[需要点时间1-2分钟]
' m6 q+ i& s( ]0 z, Y: G* @9 r, M8 y! d: g. Q
进入注册表,在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks下,应该只有一个正常的键值"{AEB6717E-7E19-11d0-97EE-00C04FD91972},将其他的删除.

已有(7)人评论

Laputa81 发表于 2007-12-30 10:45:14 | 显示全部楼层
时不时会有喱个问题出现~~~% m" @! Q: C8 r, c' l% n6 X; N0 V

$ M! K$ z2 x; E' b+ D) |学嗄嘢先~~~
ttsti 发表于 2007-12-30 14:45:22 | 显示全部楼层
出现呢种问题有好多的,如果重装系统都会出现证明是内存有问题!
Laputa81 发表于 2008-1-1 11:05:26 | 显示全部楼层
原帖由 ttsti 于 2007-12-30 14:45 发表 0 q! ]; s* g( o/ A9 d0 I
出现呢种问题有好多的,如果重装系统都会出现证明是内存有问题!

. W( w% C# p* _9 E+ V0 O# i. i: `1 G- p- C  i5 ^
) ?, c+ {6 W: T$ m8 O+ m0 ]% V
如果用2K个时无D咁情况出现呢???
4 P* o' r' l" O  Q1 s- _咁应该唔喺内存问题啰···········

评分

参与人数 1社区币 +3 +10 收起 理由
yjb338 + 3 + 10 新年快乐!

查看全部评分

abc-like 发表于 2008-1-3 10:57:15 | 显示全部楼层
暈~~!
9 J7 X' t  ~0 i0 t0 s- r; `0 B3 a怕怕見咁多字
5 A8 x- W6 V4 C; H! |0 h5 n3 H重有排傷腦筋, 重有機子要裝(唔好壞,唔好出問題)
wjr5200 发表于 2008-1-24 01:19:27 | 显示全部楼层
总觉得这种问题通常是软件问题
pytony 发表于 2008-3-20 03:25:35 | 显示全部楼层
多谢楼主甘长尽的讲解!
joeh512 发表于 2008-5-27 07:15:47 | 显示全部楼层
complicated :9
您需要登录后才可以回帖 登录 | 註冊

本版积分规则

快速
回复
返回
列表
返回
顶部