SOGO論壇
  登入   註冊   找回密碼
查看: 2966|回覆: 15
列印 上一主題 下一主題

該記憶體不能為read或written的相關說明 [複製連結]

論壇顧問

Q^心靈導師^Q

Rank: 14Rank: 14Rank: 14Rank: 14

顧問勳章 原創及親傳圖影片高手勳章 布布達人勳章

狀態︰ 離線
跳轉到指定樓層
1
發表於 2008-8-25 11:11:09 |只看該作者 |倒序瀏覽
使用Windows操作系統的人有時會遇到這樣的錯誤訊息:「「0X????????」指令引用的「0x00000000」記憶體,該記憶體不能為「read」或「written」」,然後應用程式被關閉。

如果去請教一些「高手」,得到的回答往往是「Windows就是這樣不穩定」之類的義憤和不屑。其實,這個錯誤並不一定是Windows不穩定造成的。本文就來簡單分析這種錯誤的一般原因。

一、應用程式沒有檢查記憶體分配失敗:
程式需要一塊記憶體用以儲存資料時,就需要使用操作系統提供的「功能函數」來申請,如果記憶體分配成功,函數就會將所新開闢的記憶體區地址返回給應用程式,應用程式就可以通過這個地址使用這塊記憶體。這就是「動態記憶體分配」,記憶體地址也就是編程中的「游標」。記憶體不是永遠都招之即來、用之不盡的,有時候記憶體分配也會失敗。當分配失敗時系統函數會返回一個0值,這時返回值「0」已不表示新啟用的游標,而是系統向應用程式發出的一個通知,告知出現了錯誤。作為應用程式,在每一次申請記憶體後都應該檢查返回值是否為0,如果是,則意味著出現了故障,應該採取一些措施挽救,這就增強了程式的「健壯性」。若應用程式沒有檢查這個錯誤,它就會按照「思維慣性」認為這個值是給它分配的可用游標,繼續在之後的執行中使用這塊記憶體。真正的0地址記憶體區儲存的是電腦系統中最重要的「中斷描述符表」,絕對不允許應用程式使用。在沒有保護機制的操作系統下(如DOS),寫資料到這個地址會導致立即當機,而在健壯的操作系統中,如Windows等,這個操作會馬上被系統的保護機制捕獲,其結果就是由操作系統強行關閉出錯的應用程式,以防止其錯誤擴大。這時候,就會出現上述的「寫記憶體」錯誤,並指出被引用的記憶體地址為「0x00000000」。記憶體分配失敗故障的原因很多,記憶體不夠、系統函數的版本不匹配等都可能有影響。因此,這種分配失敗多見於操作系統使用很長時間後,安裝了多種應用程式(包括無意中「安裝」的病毒程式),更改了大量的系統參數和系統檔案之後。

二、應用程式由於自身BUG引用了不正常的記憶體游標:
在使用動態分配的應用程式中,有時會有這樣的情況出現:程式試突讀寫一塊「應該可用」的記憶體,但不知為什麼,這個預料中可用的游標已經失效了。有可能是「忘記了」向操作系統要求分配,也可能是程式自己在某個時候已經註銷了這塊記憶體而「沒有留意」等等。註銷了的記憶體被系統回收,其訪問權已經不屬於該應用程式,因此讀寫操作也同樣會觸發系統的保護機制,企圖「違法」的程式唯一的下場就是被操作終止執行,回收全部資源。電腦世界的法律還是要比人類有效和嚴厲得多啊!像這樣的情況都屬於程式自身的BUG,你往往可在特定的操作順序下重現錯誤。無效游標不一定總是0,因此錯誤提示中的記憶體地址也不一定為「0x00000000」,而是其它隨機數位。如果系統經常有所提到的錯誤提示,下面的建議可能會有說明 :

1.檢視系統中是否有木馬或病毒。這類程式為了控制系統往往不負責任地修改系統,從而導致操作系統異常。平常應加強訊息安全意識,對來源不明的可執行程式絕不好奇。

2.更新操作系統,讓操作系統的安裝程式重新拷貝正確版本的系統檔案、修正系統參數。有時候操作系統本身也會有BUG,要注意安裝官方發行的升級程式。

3.試用新版本的應用程式。


三、範例說明:
例一:打開IE瀏覽器或者沒過幾分鐘就會出現"0x70dcf39f"指令引用的"0x00000000"記憶體。該記憶體不能為「read」。要終止程式,請單擊「確定」的訊息框,單擊「確定」後,又出現「發生內部錯誤,您正在使用的其中一個視窗即將關閉」的訊息框,關閉該提示訊息後,IE瀏覽器也被關閉。 解決方法:修復或升級IE瀏覽器,同時打上修正檔。看過其中一個修復方法是,Win2000自升級,也就是Win2000升級到Win2000,其實這種方法也就是把系統還原到系統初始的狀態下。比如你的IE升級到了6.0,自升級後,會被IE5.0代替。

例二:在windows xp下雙擊光碟裡面的「AutoRun.exe」文件,顯示「0x77f745cc」指令引用的「0x00000078」記憶體。該記憶體不能為「written」,要終止程式,請單擊「確定」,而在Windows 98里執行卻正常。 解決方法:這可能是系統的相容性問題,winXP的系統,右鍵「AutoRun.exe」文件,內容,相容性,把「用相容模式執行這個程式」項選擇上,並選擇「Windows 98/Me」。win2000如果打了SP的修正檔後,只要開始,執行,輸入:regsvr32 c:\winnt\apppatch\slayerui.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。

五、經常建議的作法:

1、執行 輸入cmd Enter鍵在命令提示字元下輸入
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1
這個命令老兄你慢慢輸 輸入正確的話會看到飛快地滾屏 否則……否則失敗就是沒這效果。Enter鍵後慢慢等(需要點時間1-2分鐘) 都執行完再打開看

2、這是個典型問題~~~~~引起這個問題的原因很多。一般來講就是給系統打上修正檔和更換記憶體、給記憶體換個插槽這3種方法來解決。[系統修正檔只要到Microsoft Update網站線上更新就可以了]
喜歡嗎?分享這篇文章給親朋好友︰
               感謝作者     

Rank: 3Rank: 3

狀態︰ 離線
2
發表於 2008-8-25 17:50:06 |只看該作者
老鳥你真的太利害了  
你是工程師   還是在寫軟體的

狀態︰ 離線
3
發表於 2008-9-2 22:12:04 |只看該作者
實在很厲害 剛好遇到來試看看

Rank: 10Rank: 10Rank: 10

熱心參予論壇活動及用心回覆主題勳章

狀態︰ 離線
4
發表於 2008-9-5 12:51:49 |只看該作者
想必大大對系統應該有相當的了解~
謝謝你詳細的解說~
讓小弟對系統又有進一步的了解~~

Rank: 2

狀態︰ 離線
5
發表於 2008-9-15 01:06:24 |只看該作者
每次遇到這個記憶體不能為read或written頭很痛...
看到你所提的可以拿來用看看..看能不能不會在出現

Rank: 4

狀態︰ 離線
6
發表於 2008-9-16 14:04:11 |只看該作者
我感覺比較可能是Windows系統的問題, 我的電腦前數個月不斷的出現類似的狀況, 尤其是用Firefox上網, 每天都會出現十幾到三十幾次, 版主建議的我可一樣都沒做, 我只是Firefox每次更新我都做, 最重要的是我將Windows更新到SP3, 現在已一個多月沒出現過問題了

Rank: 4

狀態︰ 離線
7
發表於 2008-9-26 22:23:55 |只看該作者
說得很詳盡,真是不簡單,可謂對於電腦內部的運作之瞭解,己到了爐火純青的地步了,佩服!

Rank: 3Rank: 3

狀態︰ 離線
8
發表於 2008-9-30 01:53:19 |只看該作者
真是所謂行家一出手便知有沒有
所以WINDOWS本身從3.1到SP版
一直都沒進步容錯相容都很低反
觀小蘋果那廂,可是精進的很呢?

Rank: 2

狀態︰ 離線
9
發表於 2008-10-22 22:50:52 |只看該作者
感謝分享  謝謝 魯力 感謝
我的電腦就是這個問題
有加入SOGO論壇 裡面的知識蠻多的
再次感謝
陳浮生

Rank: 2

狀態︰ 離線
10
發表於 2008-10-23 17:54:43 |只看該作者
執行 輸入cmd Enter鍵在命令提示字元下輸入
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1
跑完後SysInfoMyWork執行完後不能用
請指教  謝謝
陳浮生
請注意︰利用多帳號發表自問自答的業配文置入性行銷廣告者,將直接禁訪或刪除帳號及全部文章!
您需要登錄後才可以回覆 登入 | 註冊


本論壇為非營利自由討論平台,所有個人言論不代表本站立場。文章內容如有涉及侵權,請通知管理人員,將立即刪除相關文章資料。侵權申訴或移除要求:abuse@oursogo.com

GMT+8, 2024-11-2 22:29

© 2004-2024 SOGO論壇 OURSOGO.COM
回頂部