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