2009-09-26 82 views
1

我見過很多錯誤在我的電腦使用壽命的過程中,很多人似乎訪問衝突異常調用出路成非可讀存儲器或00000000/0xFFFFFFFF的。爲什麼會出現如此多的錯誤「AccessViolationException」?

什麼樣的編程錯誤導致這種情況?當某些事情發生錯誤時,是否有意讓程序崩潰?

+0

任何理由得到近距離投票? – RCIX 2009-09-26 05:36:30

回答

3

絕對不是「有意讓程序崩潰,當事情變得非常錯誤」 - 他們只是稱它們的語言等價於exit(error_code)...你不想隨機跳到內存中某處導致它崩潰。

基本上這意味着程序正在嘗試讀取操作系統允許的範圍之外的內存位置。

這需要某種語言的指針概念,並且指針中的內存地址被設置爲錯誤的值。這可以通過類似忘記設置指針的值是一個int的地址它的指向,而是將其設置爲整型持有所致。這可能是因爲錯誤的數據/輸入處理 - 你創建一個可以容納256個字節的數組 - 然後讀取265個數據 - 並且恰好在數組之後的指針值位於內存位置,所以現在數據「溢出'數組的末尾位於指針所在的內存位置 - 所以下一次訪問該指針時 - 它會充滿一些隨機數據,但它會像內存地址一樣處理。 (有目的地進行破解稱爲「緩衝區溢出攻擊」)。

3

解引用空指針(一個非常常見的錯誤)可能導致某些語言出現這種情況。

+1

更具體,「在不執行顯式null檢查任何語言」,這幾乎是所有非管理的人往往是。 – 2009-09-26 05:55:45

相關問題