06.07 系統出現內存不能為written或read不用慌,這五個方法輕鬆搞定!

電腦是我們工作、娛樂不可或缺的工具,每個人都會生病,電腦也一樣,尤其是在我們“暴力”使用的情況下,電腦就會出現各種各樣的崩潰。今天S姐給大家帶來了其中的一種,叫做“0X????????指令引用的0x00000000內存,該內存不能written”或是“該內存不能為read”。

系統出現內存不能為written或read不用慌,這五個方法輕鬆搞定!

當我們看到這句話點擊確定後,打開的應用程序就會自動關閉。有些人會說,這就是因為系統不穩定所導致的,不用在意。事實真的是這樣嗎?其實並不是這樣的!

電腦出現這種情況有兩個原因:一個是應用程序沒有檢查內存分配失敗另外一個就是應用程序由於自身BUG引用了不正常的內存指針。

下面我們來一一說明,當程序需要一塊內存用以保存數據時,就需要調用操作系統提供的“功能函數”來申請,如果內存分配成功,函數就會將所新開闢的內存區地址返回給應用程序,應用程序就可以通過這個地址使用這塊內存。這就是“動態內存分配”,內存地址也就是編程中的“指針”。

由於內存並不是用之不竭的,所以分配的時候就有可能出現失敗的可能。分配失敗了之後系統函數會返回一個0值,這時返回值“0”已不表示新啟用的指針,而是系統嚮應用程序發出的一個通知,告知出現了錯誤。作為應用程序,在每一次申請內存後都應該檢查返回值是否為0,如果是,則意味著出現了故障,應該採取一些措施挽救,這就增強了程序的安全性。

如果應用程序沒有檢查這個錯誤,它則按照“思維慣性”認為這個值是給它分配的可用指針,繼續在之後的運行中使用這塊內存。真正的0地址內存區保存的是計算機系統中最重要的“中斷描述符表”,絕對不允許應用程序使用。

在沒有保護機制的操作系統下(如DOS),寫數據到這個地址會導致立即死機,而在有所保護的操作系統中,這個操作會馬上被系統的保護機制捕獲,其結果就是由操作系統強行關閉出錯的應用程序,以防止其錯誤擴大。這時候,就會出現上述的“寫內存”錯誤,並指出被引用的內存地址為“0x00000000”。

第二種情況,在使用動態分配的應用程序中,有時程序試圖讀寫一塊“應該可用”的內存,但不知為什麼,這個預料中可用的指針已經失效了。有可能是“忘記”向操作系統要求分配,也可能是程序自己在某個時候已經註銷了這塊內存而“沒有留意”等等。

註銷了的內存被系統回收,其訪問權已經不屬於該應用程序,因此讀寫操作也同樣會觸發系統的保護機制,因此被操作終止運行,回收全部資源。像這樣的情況都屬於程序自身的BUG,你往往可在特定的操作順序下重現錯誤。無效指針不一定總是0,因此錯誤提示中的內存地址也不一定為“0x00000000”,而是其他隨機數字。

在瞭解了觸發的條件後,我們的解決辦法也就變得簡單起來。

解決方法:

1.首先,我們需要查看系統是否被木馬或病毒所感染,這類程序有可能會因為要獲取系統控制權從而修改系統,導致操作系統異常。

系統出現內存不能為written或read不用慌,這五個方法輕鬆搞定!

2.更新或恢復操作系統,讓操作系統恢復到一個正常的版本,修復系統文件和正確的參數,當然每個版本的操作系統也會存在自身的BUG,我們可以隨時關注官方發佈的升級程序。

3.使用正式版的軟件和系統,beta測試版或使用版應用程序有可能就存在不穩定性和BUG。

4.重新註冊系統所有DLL文件,【Win】+【R】打開“運行”菜單欄輸入【cmd】,按【Enter】鍵進入"c:\\windows\\system32\\cmd.exe"窗口 。在"c:\\windows\\system32\\cmd.exe"窗口中的命令提示符下直接輸入:for %1 in (%windir%\\system32\\*.dll) do regsvr32.exe /s %1 最後點擊【Enter】鍵。

5.如果以上這些操作仍舊不能解決問題,重裝系統也頻繁出現內存報錯的情況,就需要排查硬件問題了,換條內存進行測試一下。

好辣~以上就是解決內存不能為read或written等錯誤的辦法啦,如果你正在因為這個問題而飽受煎熬的話就趕緊自己動起手來試一試吧~當然在操作前請務必務必務必

備份好重要資料!本期內容就到這裡了~我們下期再見咯~!


分享到:


相關文章: