/ling Liang/blog/item/2378 be 08 CDF 5d 735 e 8248848 . html
使用Windows操作系統的人有時會遇到以下錯誤信息:“0x 000000000 0x指令引用的內存無法寫入”,然後應用程序關閉。如果妳問壹些“專家”,得到的答案往往是“Windows這麽不穩定”之類的憤慨和不屑。其實這個錯誤不壹定是Windows的不穩定造成的。本文將簡單分析這種錯誤的常見原因。
首先,應用程序無法檢查內存分配。
當壹個程序需要壹塊內存來存儲數據時,需要調用操作系統提供的“函數function”來申請。如果內存分配成功,函數會將新打開的內存區域的地址返回給應用程序,應用程序可以通過這個地址使用這個內存。這就是“動態內存分配”,內存地址也是編程中的“指針”。
內存並不總是可用和取之不盡的,有時內存分配會失敗。當分配失敗時,系統函數將返回值0。此時,返回值“0”不再指示新啟用的指針,而是系統發送給應用程序的壹個通知,表明發生了錯誤。作為應用程序,應該在每次內存應用後檢查返回值是否為0。如果是,則說明存在故障,需要采取壹些措施來挽救,增強了程序的“健壯性”。
如果應用程序不檢查這個錯誤,它會認為這個值是根據“思維慣性”分配給它的壹個可用指針,並在後續操作中繼續使用這個內存。真正的0地址存儲區存儲的是計算機系統中最重要的“中斷描述符表”,是絕對不允許應用程序使用的。在壹個沒有保護機制的操作系統(比如DOS)中,向這個地址寫數據會導致立即崩潰,而在壹個健壯的操作系統中,比如Windows,這個操作會立即被系統的保護機制捕獲,結果是操作系統會強制關閉錯誤的應用程序,防止其錯誤擴大。此時會出現上述“寫內存”錯誤,指出引用的內存地址為“0x00000000”。
內存分配失敗的原因有很多,比如內存不足,系統函數版本不匹配等。所以這種分配失敗多見於操作系統使用時間較長,安裝了多種應用程序(包括無意中安裝的病毒程序),大量更改系統參數和系統文件之後。
二是應用程序由於自身BUG引用了異常內存指針。
在使用動態分配的應用程序中,有時會發生這樣的情況,程序試圖讀寫壹個“應該可用”的內存,但由於某種原因,這個預期的可用指針已經失敗了。可能是“忘記”向操作系統要求分配,也可能是程序本身在某個時候取消了這個內存,“沒註意”等等。被註銷的內存被系統回收,其訪問權不再屬於應用程序,因此讀寫操作也會觸發系統的保護機制,而試圖“違法”的程序唯壹的最終結果就是被操作停止,收回所有資源。計算機世界的法則還是比人類有效和嚴厲得多!
像這樣的情況屬於程序本身的BUG,妳經常可以在壹個特定的操作序列中重現錯誤。無效指針不總是0,所以錯誤提示中的內存地址不壹定是“0x00000000”,也可以是其他隨機數。
如果系統經常出現上述錯誤提示,以下建議可能會有所幫助:
1.檢查系統中是否有特洛伊病毒。這類程序為了控制系統,往往會不負責任地修改系統,導致操作系統異常。平時要加強信息安全意識,千萬不要對來源不明的可執行程序感到好奇。
2.更新操作系統,使操作系統的安裝程序能夠復制正確版本的系統文件並修正系統參數。有時候操作系統本身也有bug,要註意安裝官方發布的升級程序。
3.嘗試應用程序的新版本。
問題
在運行壹些程序時,有時會出現內存錯誤提示,然後程序就會關閉。
“0x”指令引用了“0x”內存。存儲器不能被“讀取”。
0x指令引用的0x內存,不能“寫入”。
總的來說,這種現象有很多方面。壹是硬件有問題,也就是內存,二是軟件有很多問題。
故障分析
硬件:
壹般來說,內存出現問題的可能性不大。主要方面是:內存條壞了,內存質量有問題,有兩個不同品牌不同容量的內存,也容易出現不兼容的情況。同時壹定要註意散熱問題,尤其是超頻之後。可以用軟件MemTest來檢查內存,可以徹底檢查內存的穩定性。
如果是雙內存,並且不同品牌的內存條混用或者買了二手內存,就會出現這個問題。這時候就要檢查是內存有問題還是和其他硬件不兼容了。
軟件:
先簡單說壹下原理:內存中有壹個用來存儲數據的地方叫做buffer。程序把數據放在壹個地方,會因為空間不夠而溢出。比如壹個水桶只能裝壹斤水。放入兩斤水,就會溢出來。系統顯示在屏幕上。這個問題經常出現在windows2000和XP系統中。Windows 2000/XP對硬件的要求非常嚴格。在類似Windows 98的資源死鎖、溢出或非法操作的情況下,為了保持系統穩定,會出現上述情況。此外,也可能是硬件設備之間兼容性差造成的。
幾個例子
例1:打開IE瀏覽器或者幾分鐘後會出現“0x70dcf39f”指令引用的“0x00000000”內存。存儲器不能被“讀取”。要終止程序,請單擊“確定”。單擊“確定”後,將出現消息框“出現內部錯誤,您正在使用的壹個窗口即將關閉”。關閉這個提示信息後,IE瀏覽器也關閉了。
解決方法:修復或升級IE瀏覽器,同時打補丁。我看到有壹種修復方法是Win2000自升級,即Win2000升級到Win2000。其實這個方法就是把系統恢復到初始狀態。比如妳的IE升級到6.0,升級後就換成了IE5.0。
例2:雙擊windows xp下光盤中的“AutoRun.exe”文件,顯示“0x77f745cc”指令引用的“0x00000078”內存。存儲器不能被“寫入”。要終止程序,單擊“確定”,但它在Windows 98中正常運行。
解決方法:這可能是系統的兼容性問題。對於winXP系統,右擊“AutoRun.exe”文件,屬性和兼容性,選擇“在兼容模式下運行此程序”,選擇“Windows 98/Me”。Win2000,如果SP打了補丁,只要啟動運行,輸入:regsvr 32 c:\ win nt \ app patch \ slayer ui.dll。右鍵單擊,屬性和兼容性選項也會出現。
例3:關閉RealOne Gold時出現錯誤。以前是正常的,但是最近“0xffffffff”指令引用的“0xffffffff”內存在每次關閉時都會出現。這種記憶不可能是“已讀”的暗示。
解決方法:當使用的輸入法是微軟拼音輸入法2003,並且語言欄是隱藏的(不隱藏的時候沒問題),關閉RealOne的時候會出現這個問題,所以妳可以在關閉RealOne之前顯示語言欄或者使用其他任何輸入法作為當前輸入法來解決這個問題。
例4:我的英雄超級解霸從上網開始就玩不了了。每次提示“Ox060692f6”命令引用的“Oxff000011”內存無法“讀取”時,請按OK終止程序。
解決方法:嘗試重裝英雄超級解霸。如果是重裝,可以嘗試從官網下載相應版本的補丁。還沒有,所以我不得不嘗試另壹個球員。
例子5:雙擊遊戲的快捷方式。“Ox77f5cdO”指令指的是“Oxffffffff”內存,無法“讀取”,提示Client.dat程序錯誤。
解決方法:重新安裝顯卡最新驅動,然後下載安裝DirectX9.0。
例6:朋友給我發消息,我的電腦得到錯誤信息:“0*772b548f”命令引用的“0*00303033”內存無法“寫入”,然後QQ自動下線,然後我打開QQ發現他發的十幾條消息。
解決方法:這是對方利用QQ的BUG發送特殊代碼,在QQ中出錯。只要打補丁或者升級到最新版本就沒事了。
例7:我筆記本電腦用的XP系統,網頁關閉時有時會彈出。tbrowser.exe遇到問題需要關閉時,彈出指令0x03e7c738引用的內存0x03e7c738,無法讀取。發生了什麽事?
解決方法:先殺毒,如果已經安裝了瀏覽增強等軟件,請卸載。
示例8:當從桌面或“開始”菜單打開任何程序時,都會出現壹條錯誤消息:“0x00000000”內存被“0x ...”引用指令不能被“讀取”。省略號代表壹個變量值。而且從運行中打開程序也沒問題。
解決方法:運行regedit進入註冊表,在HKEY _ local _ machine \ software \ Microsoft \ Windows \ Current version \ Explorer \ shellee execute hooks下,應該只有壹個正常的鍵值“{ aeb 6717e-7e 19-11d 0-97ee-00 c 04 FD 91972 }”,其他的都要刪除(當然默認鍵值也不應該刪除)。
《出埃及記》我三個月前買了壹臺機器。系統不穩定。系統三個月重裝了很多次,四五天前才剛剛安裝,但是經常會出現隨機的Explorer- application錯誤。“0x4a01259d”指令指的是“0x00000000”存儲器。存儲器不能被“讀取”。要終止程序,請單擊“確定”。若要調試程序,請單擊“取消”。如果您單擊確定,windows桌面將會消失。之前的系統也出現過這個問題。不知道是不是硬件問題?
解決方法:內存兼容問題!如果出現這種問題,用戶可以打開機器,調整內存的位置,看看是否可以解決問題。如果問題仍然存在,他們可以與妳的朋友交換記憶。
通過上面的例子,我們可以看出失敗的原因是多方面的。下面列出了已經提到的和可能出現的原因,方便參考。
問題的原因-解決方案
記憶棒壞了-更換它。
雙內存不兼容-使用相同品牌的內存或僅使用壹個內存。
內存質量問題-更換內存條
散熱問題——加強機箱內部散熱
內存和主板沒有正確插入或與其他硬件不兼容等。-重新插入內存或更換內存。
硬盤有問題-更換硬盤
驅動器問題-重新加載驅動器。如果是新系統,要先安裝主板驅動。
軟件損壞-重新安裝軟件
軟件有缺陷,修補壹下或者使用最新版本。
軟件和系統不兼容-修補軟件或嘗試系統的兼容模式。
軟件和軟件是有沖突的——如果最近有什麽新軟件裝了,卸載試試。
使用其他相關軟件有問題——重裝相關軟件。比如播放某種格式的文件時出現錯誤,可能是這個文件的解碼器有問題。
病毒問題-防病毒
殺毒軟件與系統或軟件沖突——因為殺毒軟件進入底層監控系統,可能會與某些軟件沖突,所以嘗試卸載。
系統本身有問題——有時候操作系統本身也有bug,所以要註意安裝官方的升級程序,比如SP補丁,最好裝上。如果沒有,請重新安裝系統或更換為另壹個版本。
這個問題引起了我們的註意,有解決的辦法。請到我們官網了解並下載相關程序。
在運行壹些程序時,有時會出現內存錯誤提示,然後程序就會關閉。
“0x”指令引用了“0x”內存。存儲器不能被“讀取”。
0x指令引用的0x內存,不能“寫入”。
以上情況相信大家都看到了,甚至說有網友因為不滿意這種頻繁的錯誤提示,反復重裝系統。相信普通用戶應該看不懂那些復雜的十六進制代碼。
造成這種現象的原因有很多。壹是硬件有問題,也就是內存,二是軟件有很多問題。
壹:先說硬件:
壹般來說,電腦硬件不容易壞。內存問題不太可能(除非妳的內存真的是壹堆雜牌),主要方面是:1。內存壞了(大多是二手內存),2。使用有質量問題的內存,3。插在主板上的內存金手指部分灰塵太多。4。使用不同品牌和容量的內存,導致不兼容。5。超頻導致的散熱問題。可以用軟件MemTest來檢查內存,可以徹底檢查內存的穩定性。
第二,如果沒有,則排除軟件故障。
先說原理:內存中有壹個用來存儲數據的地方叫緩沖區。當程序將數據放入緩沖區時,需要操作系統提供的“函數function”來應用。如果內存分配成功,函數會將新打開的內存區域的地址返回給應用程序,應用程序可以通過這個地址使用這個內存。這就是“動態內存分配”,內存地址也是編程中的“光標”。內存並不總是可用和取之不盡的,有時內存分配會失敗。當分配失敗時,系統函數將返回值0。此時,返回值“0”不再表示新啟用的光標,而是系統發送給應用程序的通知,表示發生了錯誤。作為應用程序,應該在每次內存應用後檢查返回值是否為0。如果是,則說明存在故障,需要采取壹些措施來挽救,增強了程序的“健壯性”。如果應用程序不檢查這個錯誤,它會認為這個值是根據“思維慣性”分配給它的可用遊標,並在後續執行中繼續使用這個內存。真正的0地址存儲區存儲的是計算機系統中最重要的“中斷描述符表”,是絕對不允許應用程序使用的。在壹個沒有保護機制的操作系統中(比如DOS),向這個地址寫數據會導致立即崩潰,而在壹個健壯的操作系統中,比如Windows,這個操作會立即被系統的保護機制捕獲,結果操作系統會強制關閉錯誤的應用程序,防止其錯誤擴大。此時會出現內存無法“讀取”的錯誤,指出引用的內存地址為“0x00000000”。內存分配失敗的原因有很多,比如內存不足,系統函數版本不匹配等。所以這種分配失敗多見於操作系統使用時間較長,安裝了多種應用程序(包括無意中“安裝”的病毒程序),大量更改系統參數和系統文件之後。
在使用動態分配的應用程序中,有時會發生這樣的情況,程序試圖讀寫壹個“應該可用”的內存,但是由於某種原因,預期的可用遊標失敗了。可能是“忘記”向操作系統要求分配,也可能是程序本身在某個時候取消了這個內存,“沒註意”等等。被註銷的內存被系統回收,其訪問權不再屬於應用程序,因此讀寫操作也會觸發系統的保護機制,而試圖“違法”的程序唯壹的最終結果就是被操作終止,收回所有資源。計算機世界的法則還是比人類有效和嚴厲得多!像這樣的情況屬於程序本身的BUG,妳經常可以在壹個特定的操作序列中重現錯誤。無效光標不壹定是0,所以錯誤提示中的內存地址不壹定是“0x00000000”,也可以是其他隨機數。
首先,建議:
1,檢查系統中是否有特洛伊木馬或病毒。這類程序為了控制系統,往往會不負責任地修改系統,導致操作系統異常。平時要加強信息安全意識,千萬不要對來源不明的可執行程序感到好奇。
2、更新操作系統,讓操作系統安裝程序復制正確版本的系統文件,修正系統參數。有時候操作系統本身也有bug,要註意安裝官方發布的升級程序。
3、盡量使用最新的正式版應用,Beta版,試用版都會有bug。
4.刪除並重新創建Winnt\System32\Wbem\Repository文件夾中的文件:右鍵單擊桌面上的“我的電腦”,然後單擊“管理”。在“服務和應用程序”下,單擊“服務”,然後關閉並停止Windows Management Instrumentation服務。刪除Winnt\System32\Wbem\Repository文件夾中的所有文件。(請在刪除之前備份這些文件。)打開服務和應用程序,單擊服務,然後打開並啟動Windows Management Instrumentation服務。當該服務重新啟動時,將根據以下註冊表項中提供的信息重新創建這些文件:HKEY _本地_機器\軟件\ Microsoft \ WBEM \ CIMOM \ autorecovermofs。
這裏有幾個例子供妳分析:
例1:IE瀏覽器中出現“08ba9ef”指令引用的“0x03713644”內存或“0x70dcf39f”指令引用的“0x0000000”內存。存儲器不能被“讀取”。要終止程序,請單擊“確定”。單擊“確定”後,將出現消息框“出現內部錯誤,您正在使用的壹個窗口即將關閉”。關閉這個提示信息後,IE瀏覽器也關閉了。解決方案:
1,開始-運行窗口,輸入“REGSVR32 actxprxy.dll”回車,會出現壹個信息對話框“actxprxy.dll的DLLRegisterServer成功了”,確認。然後依次運行以下命令。(有人說這個方法沒必要,但是重新註冊那些。dll不會對系統造成損害。反正做什麽都是為了解決問題就夠了。)
shdocvw.dll註冊服務商32
oleaut32.dll註冊服務商32
actxprxy.dll註冊服務商32
mshtml.dll註冊服務商32
msjava.dll註冊服務商32
browseui.dll註冊服務商32
urlmon.dll註冊服務商32
2.修復或升級IE瀏覽器,同時給系統打補丁。我見過的修復方法之壹就是把系統恢復到初始狀態。建議將IE升級到6.0。
例2:壹些應用錯誤:“0x7cd64998”指令引用了“0x14c96730”內存。存儲器不能被“讀取”。解決方案:Win XP的“預讀”技術,壹種優化技術,也被應用到應用程序中。系統對每個應用程序的前壹次啟動進行分析,然後添加壹個虛擬的“內存映像”來描述應用程序的需求,並將這些信息存儲在Windows\Prefetch文件夾中。壹旦鏡像建立,應用軟件的加載速度大大提高。XP的預讀數據存儲最近八次系統啟動或應用軟件啟動的信息。建議更換虛擬內存,刪除所有*。PF文件,並讓windows再次收集程序的物理地址。
例3:雙擊XP下光盤中的“AutoRun.exe”文件,顯示“0x77f745cc”指令引用的“0x00000078”內存。存儲器不能被“寫入”。要終止程序,單擊“確定”,但它在Windows 98中正常運行。解決方法:這可能是系統的兼容性問題。對於winXP系統,右擊“AutoRun.exe”文件,屬性和兼容性,選擇“在兼容模式下運行此程序”,選擇“Windows 98/Me”。Win2000,如果SP打了補丁,只要啟動運行,輸入:regsvr 32 c:\ win nt \ app patch \ slayer ui.dll。右鍵單擊,屬性和兼容性選項也會出現。
例4:關閉RealOne Gold時出現錯誤。以前是正常的,但是最近“0xffffffff”指令引用的“0xffffffff”內存在每次關閉時都會出現。這種記憶不可能是“已讀”的暗示。解決方法:當使用的輸入法是微軟拼音輸入法2003,並且語言欄是隱藏的(不隱藏的時候沒問題),關閉RealOne的時候會出現這個問題,所以妳可以在關閉RealOne之前顯示語言欄或者使用其他任何輸入法作為當前輸入法來解決這個問題。
例5:我的英雄超級解霸上網後無法玩了。每次都提示命令“0x060692f6”(每次更改)引用的內存“0xff000011”不能“讀取”。請按“確定”終止程序。解決方法:嘗試重裝英雄超級解霸。如果是重裝,可以嘗試從官網下載相應版本的補丁。還沒有,所以我不得不嘗試另壹個球員。
例6:雙擊遊戲的快捷方式。指令“0x77f5cd0”引用內存“0xffffffff”,無法“讀取”,提示Client.dat程序錯誤。解決方法:重新安裝顯卡最新驅動,然後下載安裝DirectX9.0。
例7:朋友給我發消息,我的電腦得到錯誤信息:在“0x772b548f”指令引用的“0x00303033”中。