使用Windows操作系統的人有時會遇到以下錯誤信息:“0X指令引用的內存0X00000000無法讀寫”,然後關閉應用程序。如果妳問壹些“專家”,得到的答案往往是“Windows這麽不穩定”之類的憤慨和不屑。其實這個錯誤不壹定是Windows的不穩定造成的。本文將簡單分析這種錯誤的常見原因。
首先,應用程序無法檢查內存分配。
當壹個程序需要壹塊內存來存儲數據時,需要調用操作系統提供的“函數function”來申請。如果內存分配成功,函數會將新打開的內存區域的地址返回給應用程序,應用程序可以通過這個地址使用這個內存。這就是“動態內存分配”,內存地址也是編程中的“指針”。
內存並不總是可用和取之不盡的,有時內存分配會失敗。當分配失敗時,系統函數將返回值0。此時,返回值“0”不再指示新啟用的指針,而是系統發送給應用程序的壹個通知,表明發生了錯誤。作為應用程序,應該在每次內存應用後檢查返回值是否為0。如果是,則說明存在故障,需要采取壹些措施來挽救,增強了程序的“健壯性”。
如果應用程序不檢查這個錯誤,它會認為這個值是根據“思維慣性”分配給它的壹個可用指針,並在後續操作中繼續使用這個內存。真正的0地址存儲區存儲的是計算機系統中最重要的“中斷描述符表”,是絕對不允許應用程序使用的。在壹個沒有保護機制的操作系統(比如DOS)中,向這個地址寫數據會導致立即崩潰,而在壹個健壯的操作系統中,比如Windows,這個操作會立即被系統的保護機制捕獲,結果是操作系統會強制關閉錯誤的應用程序,防止其錯誤擴大。此時會出現上述“寫內存”錯誤,指出引用的內存地址為“0x00000000”。
內存分配失敗的原因有很多,比如內存不足,系統函數版本不匹配等。所以這種分配失敗多見於操作系統使用時間較長,安裝了多種應用程序(包括無意中安裝的病毒程序),大量更改系統參數和系統文件之後。
二是應用程序由於自身BUG引用了異常內存指針。
在使用動態分配的應用程序中,有時會發生這樣的情況,程序試圖讀寫壹個“應該可用”的內存,但由於某種原因,這個預期的可用指針已經失敗了。可能是“忘記”向操作系統要求分配,也可能是程序本身在某個時候取消了這個內存,“沒註意”等等。被註銷的內存被系統回收,其訪問權不再屬於應用程序,因此讀寫操作也會觸發系統的保護機制,而試圖“違法”的程序唯壹的最終結果就是被操作停止,收回所有資源。計算機世界的法則還是比人類有效和嚴厲得多!
像這樣的情況屬於程序本身的BUG,妳經常可以在壹個特定的操作序列中重現錯誤。無效指針不總是0,所以錯誤提示中的內存地址不壹定是“0x00000000”,也可以是其他隨機數。
如果系統經常出現上述錯誤提示,以下建議可能會有所幫助:
1.檢查系統中是否有特洛伊病毒。這類程序為了控制系統,往往會不負責任地修改系統,導致操作系統異常。平時要加強信息安全意識,千萬不要對來源不明的可執行程序感到好奇。
2.更新操作系統,使操作系統的安裝程序能夠復制正確版本的系統文件並修正系統參數。有時候操作系統本身也有bug,要註意安裝官方發布的升級程序。
3.嘗試應用程序的新版本。
這是由程序錯誤引起的。您可以更改程序設置或重新安裝程序。
相信大家應該都看到了,甚至說有網友因為對這種頻繁的錯誤提示不滿意而反復重裝系統。相信我們這樣的普通用戶應該看不懂那些復雜的十六進制代碼。那些只是給微軟亞洲研究院的研究人員的(開個玩笑)。
第三,軟件還是硬件
在運行壹些程序時,有時會出現內存錯誤提示,然後程序就會關閉。
“0x”指令引用了“0x”內存。存儲器不能被“讀取”。
0x指令引用的0x內存,不能“寫入”。
不知道妳有沒有過這樣的斷層?(0x之後的內容可能不壹樣。)
仔細看0x後面的內容。每個人的錯誤碼不壹樣嗎?但是他們的問題可能是壹樣的。出現此錯誤提示有兩個原因。第壹,硬件有問題,就是內存有問題。第二,軟件有很多問題。
1,先說硬件:
壹般來說,電腦硬件不容易壞。內存問題不太可能(除非妳的內存真的是壹堆雜牌),主要方面是:1。內存壞了(大多是二手內存),2。使用有質量問題的內存,3。插在主板上的內存金手指部分灰塵太多。4。使用不同品牌和容量的內存,導致不兼容。5。超頻導致的散熱問題。可以用軟件MemTest來檢查內存,可以徹底檢查內存的穩定性。
如果您有雙內存,並且不同品牌的內存芯片混用或者您購買二手內存,就會出現此問題。這時候妳就要檢查壹下是不是內存有問題,還是和其他硬件不兼容。
2.如果以上條件都不存在,那麽就從軟件方面解決問題。
先簡單說壹下原理:內存中有壹個用來存儲數據的地方叫做buffer。程序把數據放在壹個地方,會因為空間不夠而溢出。比如壹個水桶只能裝壹斤水。妳放兩斤水進去,就會溢出來。系統顯示在屏幕上。這個問題經常出現在windows2000和XP系統中。Windows2000/XP對硬件的要求非常嚴格。在類似Windows98的資源死鎖、溢出或非法操作的情況下,為了保持系統穩定,會出現上述情況。此外,也可能是硬件設備之間兼容性差造成的。
同時,由於系統運行是為了保護壹段內存,其他用戶程序無法訪問該內存,當用戶程序非法讀取這些內存空間時也會出現這種錯誤。
第四,舉幾個例子:
(1)Q:“08 ba 9 ef”指令引用的“0x03713644”內存無法“讀取”。要終止程序,請單擊“確定”。
答:IE出現錯誤,需要重置IE:
1打開“開始”菜單中的“運行”窗口,在裏面輸入“regsvr32actxprxy.dll”,然後“確定”,再出現壹個信息對話框“dllregisterserveractivexprxy。dll成功"將出現,並再次單擊"確定"。
2再次打開“運行”窗口,輸入“regsvr32shdocvw.dll
3再次打開“運行”窗口,輸入“regsvr 32 ole out 32 . dll
4再次打開“運行”窗口,輸入“regsvr32actxprxy.dll
5再次打開“運行”窗口,輸入“regsvr32mshtml.dll
6再次打開“運行”窗口,輸入“regsvr32msjava.dll
7再次打開“運行”窗口,輸入“regsvr32browseui.dll
8再次打開“運行”窗口,輸入“regsvr32urlmon.dll
(2)詢問“0x70dcf39f”指令引用的“0x00000000”內存。存儲器不能被“讀取”。要終止程序,請單擊“確定”。
答:關閉提示信息後,IE瀏覽器也關閉。解決方法:修復或升級IE瀏覽器,同時給系統打補丁。確保妳的IE升級到6.0。
(3)問:RealOneGold關閉時出現錯誤。以前是正常的,但是最近每次關機都會出現“0xffffffff”命令引用的“0x ffffff”內存。這種記憶不可能是“已讀”的暗示。
答:當使用的輸入法是微軟拼音輸入法2003,並且語言欄是隱藏的(不隱藏是沒有問題的)時,關閉RealOne會出現這個問題,所以妳可以在關閉RealOne之前顯示語言欄或者使用其他任何輸入法作為當前輸入法來解決這個問題。
(4)Q:“ox 77 f 5 CDO”指令指的是“Oxffffffff”內存,不能“讀取”。要終止程序,請單擊“確定”。
回答:雙擊壹個遊戲的快捷方式,提示Client.dat程序錯誤。解決方法:重新安裝顯卡最新驅動,然後下載安裝DirectX9.0。
(5)問:“0x772b548f”指令引用的“0x00303033”存儲器不能“寫入”。要終止程序,請單擊“確定”。
答:QQ自動下線。再次打開QQ,發現發來的消息有十幾條。解決方法:這是對方利用QQ BUG,發送特殊代碼,QQ出錯,只要打補丁或者升級到最新版本。
(6)問:打開IE瀏覽器或者幾分鐘後會出現“0x70dcf39f”指令引用的“0x00000000”內存。存儲器不能被“讀取”。要終止程序,請單擊“確定”。單擊“確定”後,將出現消息框“出現內部錯誤,您正在使用的壹個窗口即將關閉”。關閉這個提示信息後,IE瀏覽器也關閉了。
回答:修復或升級IE瀏覽器,同時打補丁。我看到有壹種修復方法是Win2000自升級,即Win2000升級到Win2000。其實這個方法就是把系統恢復到初始狀態。比如妳的IE升級到6.0,升級後就換成了IE5.0。
(7) Q:雙擊windowsxp下光盤中的“AutoRun.exe”文件,顯示“0x77f745cc”指令引用的“0x00000078”內存。存儲器不能被“寫入”。要終止程序,單擊“確定”,但它在Windows98中正常運行。
回答:這可能是系統的兼容性問題。對於winXP系統,右擊“AutoRun.exe”文件,屬性和兼容性,選擇“在兼容模式下運行此程序”,選擇“Windows98/Me”。Win2000,如果SP打了補丁,只要啟動運行,輸入:regsvr 32 c:\ win nt \ app patch \ slayer ui.dll。右鍵單擊,屬性和兼容性選項也會出現。
(8)問:我的英雄超級解霸自從上網後就壹直玩不了。每次提示“0x060692f6”命令引用的“0xff00011”內存無法“讀取”時,請按OK終止程序。
答:試試重裝英雄超級解霸。如果會重裝,可以嘗試從官網下載相應版本的補丁。還沒有,所以我不得不嘗試另壹個球員。