武林網訊 談“內存不能為read”的解決方法出現這個現象有方面的,一是硬件,即內存方面有問題,二是軟件,這就有多方面的問題了。
一:先說說硬件:
一般來說,電腦硬件是很不容易壞的。內存出現問題的可能性并不大(除非你的內存真的是雜牌的一塌徒地),主要方面是:1。內存條壞了(二手內存情況居多)、2。使用了有質量問題的內存,3。內存插在主板上的金手指部分灰塵太多。4。使用不同品牌不同容量的內存,從而出現不兼容的情況。5。超頻帶來的散熱問題。你可以使用memtest 這個軟件來檢測一下內存,它可以徹底的檢測出內存的穩定度。 數據恢復
二、如果都沒有,那就從軟件方面排除故障了。
先說原理:內存有個存放數據的地方叫緩沖區,當程序把數據放在緩沖區,需要操作系統提供的“功能函數”來申請,如果內存分配成功,函數就會將所新開辟的內存區地址返回給應用程序,應用程序就可以通過這個地址使用這塊內存。這就是“動態內存分配”,內存地址也就是編程中的“光標”。內存不是永遠都招之即來、用之不盡的,有時候內存分配也會失敗。當分配失敗時系統函數會返回一個0值,這時返回值“0”已不表示新啟用的光標,而是系統向應用程序發出的一個通知,告知出現了錯誤。作為應用程序,在每一次申請內存后都應該檢查返回值是否為0,如果是,則意味著出現了故障,應該采取一些措施挽救,這就增強了程序的“健壯性”。若應用程序沒有檢查這個錯誤,它就會按照“思維慣性”認為這個值是給它分配的可用光標,繼續在之后的執行中使用這塊內存。真正的0地址內存區儲存的是計算機系統中最重要的“中斷描述符表”,絕對不允許應用程序使用。在沒有保護機制的操作系統下(如dos),寫數據到這個地址會導致立即當機,而在健壯的操作系統中,如windows等,這個操作會馬上被系統的保護機制捕獲,其結果就是由操作系統強行關閉出錯的應用程序,以防止其錯誤擴大。這時候,就會出現上述的內存不能為“read”錯誤,并指出被引用的內存地址為“0x00000000“。內存分配失敗故障的原因很多,內存不夠、系統函數的版本不匹配等都可能有影響。因此,這種分配失敗多見于操作系統使用很長時間后,安裝了多種應用程序(包括無意中“安裝”的病毒程序),更改了大量的系統參數和系統檔案之后。
在使用動態分配的應用程序中,有時會有這樣的情況出現:程序試圖讀寫一塊“應該可用”的內存,但不知為什么,這個預料中可用的光標已經失效了。有可能是“忘記了”向操作系統要求分配,也可能是程序自己在某個時候已經注銷了這塊內存而“沒有留意”等等。注銷了的內存被系統回收,其訪問權已經不屬于該應用程序,因此讀寫操作也同樣會觸發系統的保護機制,企圖“違法”的程序唯一的下場就是被操作終止執行,回收全部資源。計算機世界的法律還是要比人類有效和嚴厲得多啊!像這樣的情況都屬于程序自身的bug,你往往可在特定的操作順序下重現錯誤。無效光標不一定總是0,因此錯誤提示中的內存地址也不一定為“0x00000000”,而是其它隨機數字。
首先建議:
1、 檢查系統中是否有木馬或病毒。這類程序為了控制系統往往不負責任地修改系統,從而導致操作系統異常。平常應加強信息安全意識,對來源不明的可執行程序絕不好奇。
2、 更新操作系統,讓操作系統的安裝程序重新拷貝正確版本的系統檔案、修正系統參數。有時候操作系統本身也會有bug,要注意安裝官方發行的升級程序。
3、 盡量使用最新正式版本的應用程序、beta版、試用版都會有bug。
4、 刪除然后重新創建 winntsystem32wbemrepository 文件夾中的文件:在桌面上右擊我的電腦,然后單擊管理。 在"服務和應用程序"下,單擊服務,然后關閉并停止 windows management instrumentation 服務。 刪除 winntsystem32wbemrepository 文件夾中的所有文件。(在刪除前請創建這些文件的備份副本。) 打開"服務和應用程序",單擊服務,然后打開并啟動 windows management instrumentation 服務。當服務重新啟動時,將基于以下注冊表項中所提供的信息重新創建這些文件: hkey_local_machinesoftwaremicrosoftwbemcimomautorecover mofs
下面搜集幾個例子給大家分析:
例一:ie瀏覽器出現“0x0a8ba9ef”指令引用的“0x03713644” 內存,或者“0x70dcf39f”指令引用的“0x00000000”內存。該內存不能為“read”。要終止程序,請單擊“確定”的信息框,單擊“確定”后,又出現“發生內部錯誤,您正在使用的其中一個窗口即將關閉”的信息框,關閉該提示信息后,ie瀏覽器也被關閉。解決方法:
1、 開始-運行窗口,輸入“regsvr32 actxprxy.dll”回車,接著會出現一個信息對話 框“dllregisterserver in actxprxy.dll succeeded”,確定。再依次運行以下命令。(這個方法有人說沒必要,但重新注冊一下那些.dll對系統也沒有壞處,反正多方下手,能解決問題就行。)
regsvr32 shdocvw.dll
regsvr32 oleaut32.dll
regsvr32 actxprxy.dll
regsvr32 mshtml.dll
regsvr32 msjava.dll
regsvr32 browseui.dll
regsvr32 urlmon.dll
2、 修復或升級ie瀏覽器,同時打上系統補丁。看過其中一個修復方法是,把系統還原到系統初始的狀態下。建議將ie升級。
例二:有些應用程序錯誤: “0x7cd64998” 指令參考的 “0x14c96730” 內存。該內存不能為 “read”。解決方法:win xp的“預讀取”技術這種最佳化技術也被用到了應用程序上,系統對每一個應用程序的前幾次啟動情況進行分析,然后新增一個描述套用需求的虛擬“內存映像”,并把這些信息儲存到windowsprefetch文件夾。一旦建立了映像,應用軟件的裝入速度大大提高。xp的預讀取數據儲存了最近8次系統啟動或應用軟件啟動的信息。建議將虛擬內存撤換,刪除windowsprefetch目錄下所有*.pf文件,讓windows重新收集程序的物理地址。
例三:在xp下雙擊光盤里面的“autorun.exe”文件,顯示“0x77f745cc”指令引用的“0x00000078”內存。該內存不能為“written”,要終止程序,請單擊“確定”,而在windows 98里運行卻正常。 解決方法:這可能是系統的兼容性問題,winxp的系統,右鍵“autorun.exe”文件,屬性,兼容性,把“用兼容模式運行這個程序”項選擇上,并選擇“windows 98/me”。win2000如果打了sp的補丁后,只要開始,運行,輸入:regsvr32 c:winntapppatchslayerui.dll。右鍵,屬性,也會出現兼容性的選項。
例四:realone gold關閉時出現錯誤,以前一直使用正常,最近卻在每次關閉時出現“0xffffffff”指令引用的“0xffffffff”內存。該內存不能為“read” 的提示。 解決方法:當使用的輸入法為微軟拼音輸入法2003,并且隱藏語言欄時(不隱藏時沒問題)關閉realone就會出現這個問題,因此在關閉realone之前可以顯示語言欄或者將任意其他輸入法作為當前輸入法來解決這個問題。
例五:我的豪杰超級解霸自從上網后就不能播放了,每次都提示“0x060692f6”(每次變化)指令引用的“0xff000011”內存不能為“read”,終止程序請按確定。 解決方法:試試重裝豪杰超級解霸,如果重裝后還會,到官方網站下載相應版本的補丁試試。還不行,只好換就用別的播放器試試了。
例六:雙擊一個游戲的快捷方式,“0x77f5cd0”指令引用“0xffffffff”內 存,該內存不能為“read” ,并且提示client.dat程序錯誤。解決方法:重裝顯卡的最新驅動程序,然后下載并且安裝directx9.0。
例七:一個朋友發信息過來,我的電腦便出現了錯誤信息:“0x772b548f”指令引用的“0x00303033”內存,該內存不能為“written”,然后qq自動下線,而再打開qq,發現了他發過來的十幾條的信息。 解決方法:這是對方利用qq的bug,發送特殊的代碼,做qq出錯,只要打上補丁或升級到最新版本,就沒事了。
通過上面的幾個例子,可以看出,出現故障的原因有好多種,在這里把以前提到或有可能發生的原因列個表,方便查閱:
原因 解決方法
1. 內存條壞了 更換內存條
2. 雙內存不兼容 使用同品牌的內存或只要一條內存
3. 內存質量問題 更換內存條
4. 散熱問題 加強機箱內部的散熱
5. 內存和主板沒插好或其他硬件不兼容 重插內存或換個插槽
6. 硬盤有問題 更換硬盤
7. 驅動問題 重裝驅動,如果是新系統,應先安裝主板驅動
8. 軟件損壞 重裝軟件
9. 軟件有bug 打補丁或更新到最新版本
10 軟件和系統不兼容 給軟件打上補丁或是試試系統的兼容模式
11 軟件和軟件之間有沖突 如果最近安裝了什么新軟件,卸載了試試
12 軟件要使用其他相關的軟件有問題 重裝相關軟件,比如播放某一格式的文件時出錯,可能是這個文件的解碼器有問題
13 病毒問題 殺毒
14 殺毒軟件與系統或軟件相沖突 由于殺毒軟件是進入底層監控系統的,可能與一些軟件相沖突,卸載試試
15 系統本身有問題 有時候操作系統本身也會有bug,要注意安裝官方發行的更新程序,象sp的補丁,最好打上.如果還不行,重裝系統,或更換其他版本的系統.
新聞熱點
疑難解答