使用Windows操作系統的人有時會遇到這樣的錯誤信息
X指令引用的
x
內存
該內存不能written
然後應用程序被關閉
如果去請教一些
高手
得到的回答往往是
Windows就是這樣不穩定
之類的義憤和不屑
其實
這個錯誤並不一定是Windows不穩定造成的
本文就來簡單分析這種錯誤的常見原因
一應用程序沒有檢查內存分配失敗 程序需要一塊內存用以保存數據時
就需要調用**作系統提供的
功能函數
來申請
如果內存分配成功
函數就會將所新開辟的內存區地址返回給應用程序
應用程序就可以通過這個地址使用這塊內存
這就是
動態內存分配
內存地址也就是編程中的
指針
內存不是永遠都招之即來
用之不盡的
有時候內存分配也會失敗
當分配失敗時系統函數會返回一個
值
這時返回值
已不表示新啟用的指針
而是系統向應用程序發出的一個通知
告知出現了錯誤
作為應用程序
在每一次申請內存後都應該檢查返回值是否為
如果是
則意味著出現了故障
應該采取一些措施挽救
這就增強了程序的
健壯性
若應用程序沒有檢查這個錯誤
它就會按照
思維慣性
認為這個值是給它分配的可用指針
繼續在之後的運行中使用這塊內存
真正的
地址內存區保存的是計算機系統中最重要的
中斷描述符表
絕對不允許應用程序使用
在沒有保護機制的**作系統下(如DOS)
寫數據到這個地址會導致立即死機
而在健壯的**作系統中
如Windows等
這個**作會馬上被系統的保護機制捕獲
其結果就是由**作系統強行關閉出錯的應用程序
以防止其錯誤擴大
這時候
就會出現上述的
寫內存
錯誤
並指出被引用的內存地址為
x
內存分配失敗故障的原因很多
內存不夠
系統函數的版本不匹配等都可能有影響
因此
這種分配失敗多見於**作系統使用很長時間後
安裝了多種應用程序(包括無意中
安裝
的病毒程序)
更改了大量的系統參數和系統文件之後
二應用程序由於自身BUG引用了不正常的內存指針 在使用動態分配的應用程序中
有時會有這樣的情況出現
程序試圖讀寫一塊
應該可用
的內存
但不知為什麼
這個預料中可用的指針已經失效了
有可能是
忘記了
向**作系統要求分配
也可能是程序自己在某個時候已經注銷了這塊內存而
沒有留意
等等
注銷了的內存被系統回收
其訪問權已經不屬於該應用程序
因此讀寫**作也同樣會觸發系統的保護機制
企圖
違法
的程序唯一的下場就是被**作終止運行
回收全部資源
計算機世界的法律還是要比人類有效和嚴厲得多啊!
像這樣的情況都屬於程序自身的BUG
你往往可在特定的**作順序下重現錯誤
無效指針不一定總是
因此錯誤提示中的內存地址也不一定為
x
而是其他隨機數字
如果系統經常有所提到的錯誤提示
下面的建議可能會有幫助
查看系統中是否有木馬或病毒
這類程序為了控制系統往往不負責任地修改系統
從而導致**作系統異常
平常應加強信息安全意識
對來源不明的可執行程序絕不好奇
更新**作系統
讓**作系統的安裝程序重新拷貝正確版本的系統文件
修正系統參數
有時候**作系統本身也會有BUG
要注意安裝官方發行的升級程序
試用新版本的應用程序
From:http://tw.wingwit.com/Article/Fault/201311/10588.html