程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 什麼是訪問沖突(AccessViolations),如何排除該類錯誤

什麼是訪問沖突(AccessViolations),如何排除該類錯誤

編輯:Delphi

無論何時碰到的訪問沖突都意味著你的程序試圖訪問不能再為你的程序所獲得的內存。請注意我用了“不再(No Longer)“獲得。在很多場合中遇到訪問沖突都是因為試圖引用已經釋放的對象的指針或者尚未創建的對象的指針。

幸運的是,Win32的內存結構中,每個進程擁有獨立的地址空間,因此我們不必擔心覆蓋其他程序的內存(這個在Win16種是經常遇到的問題)。這也說明了我們如今(actually)可以利用錯誤對話框中的信息。

當我們碰到訪問沖突對話框時,都會有個地址(例如:Access violation at address:?????)。記下這個地址,返回到應用程序中,打開CPU窗口,在CPU窗口中右擊鼠標選擇Goto address。當對話框出現的時候,輸入剛才訪問沖突發生的地方,你就到了引起訪問沖突的指令。

盡管CPU窗口中所有的都是用匯編語言寫的,這並不對你很重要。如果你把滾動條向上滾一點,就可以看到你當前所處的函數。現在,你就知道是哪個函數引起了訪問沖突。一旦你知道引起訪問沖突的函數,就可以著手在這個函數中設立斷點。

不幸的是,不是所有的事情都那麼容易,指針錯誤有時候非常難查找,總的規則是當指針所指向的對象被釋放的時候,把這些指針都設置為NULL,你也許還想在厭惡的函數中使用指針前檢查它是否為NULL,如果為NULL你可以輸出一些排錯信息來幫助你查明哪個指針在程序運行時引起了訪問錯誤。

作為最後的手段,你需要能夠在那個指針處設立數據斷點(data break point) 來檢查它何時設為NULL。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved