日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

access violation at address in module Read of address

發布時間:2024/4/17 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 access violation at address in module Read of address 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://zhidao.baidu.com/question/91187173

Access Violation(非法訪問)錯誤的解決方法(轉自網上)2009-02-03 16:33??????? Access

Violation(非法訪問),General Protection Fault(一般保護性錯誤)或者Invalid Page Fault(無

效頁面錯誤),雖然說法不一樣,但本質上總是由同一種錯誤引起的。Access Violation常常在計算機

用戶運行的程序試圖存取未被指定使用的存儲區時遇到。
Access violation at address <十六進制值>
in module <應用程序名>
Read of address <十六進制值>

? Windows用戶可能經常會看到類似于錯誤提示:“Error:Access violation at address 836556F8

(004096da). Read of address 836556F8(00401000)”。作為一個Delphi程序開發者,遇到這種錯

誤的機會比其他用戶更多(^_^)。

? 一旦Windows要在它被分配的存儲區之外寫數據信息,它就會覆蓋其他程序甚至操作系統的命令或數

據。一旦發生了這種情況,操作系統將會癱瘓或者以某種形式關閉,你必須重新啟動計算機。例如,在

Windows NT/2000下一個程序遇到這種錯誤時,Dr. Watson出現并且停止了該程序,捕獲了一些快速的細

節狀態,再把它們用文本形式記錄下來。Access Violation是某些最令人氣惱的Windows程序遇到的錯誤

之一。本文的目的就是讓你找到Delphi中Access Violation的解決之道。首先聲明一點,Access

Violation和Microsoft Access沒有任何關系。

? 用Delphi開發程序時,我們可以把遇到的Access Violation分成兩大類:運行期和設計期。

一、設計期的Access Violation

1.硬件原因
? 在啟動或關閉Delphi IDE以及編譯一個Delphi工程時容易出現設計期的Access Violation。在你的

計算機運行中出現Access Violation信息可能由各種各樣的原因引起,包括系統BIOS、操作系統或者是

硬件驅動線,有些聲卡、顯卡、網卡實際上也會導致這種錯誤。為什么這么說?計算機里的每一塊卡都

有它的設備驅動程序。對于不同的制造商、不同版本的Windows或者不同版本的Delphi都可能會遇到不同

的問題。如下的幾個步驟可能有助于你解決遇到的這些問題:

? 1. 按照必要的步驟來證實你安裝的驅動程序之間沒有沖突。

? 2. 有時降低顯示分辨率可能會使某些古怪的顯卡驅動程序穩定一些。

? 3. 如果使用雙處理器的主板,則保證對每個處理器的修改步驟一樣。

? 4. 對于計算機上的所有硬件注意使用最新的驅動程序。

2.軟件原因
? 盡管Intel的計算機中Windows是最流行的操作系統,由于Windows系統天生的脆弱性和BUG,應用程

序的誤操作可能導致操作系統的迅速癱瘓(有時操作系統本身也會莫名其妙的癱瘓)。選擇一個更穩定

的程序開發環境是解決之道,如下幾個步驟可以幫助你防止某些Access Violation的發生:

? (1)盡管Windows 9X相當流行,Windows NT/2000還是從多方面被證實是一個穩定得多的環境,幾

乎對于所有的Windows代碼平臺而言都是這樣。

(2) 確保對于Windows NT/2000已經安裝了最新的service pack。每次安裝完新版的service pack,你

會發現機器變得穩定了。

(3) 為你使用的各種版本的Delphi裝上當前的更新或補丁(BDE、ADO……),這是提前預防錯誤的好

辦法。盡量使用最新的Delphi補丁——Access Violation錯誤數量尤其是設計期的錯誤數會大大減少。

(4)如果你在IDE中經常隨機遇到Access Violation錯誤,很有可能是你安裝了一個不好的控件、包或

者一個向導,它不是你使用的版本的Delphi所編寫或編譯的。試著一個一個卸載定制的控件(或者包)

直到問題被解決,然后聯系控件廠商關注這個問題的結果。


(5) 檢查一下計算機里是否有沒用的東西和程序沖突。奇怪的軟件程序和測試版的產品常常會導致

Access Violation錯誤。

(6) 如果系統設置有錯誤,那么Access Violation錯誤可能也會經常出現。如果你不停地遇到一個錯

誤提示信息一樣的Access Violation,記錄下這些細節,然后通知可能導致這個錯誤的軟件制造廠商。

這些就是我對設計期Access Violation錯誤的全部建議。

二、運行期的Access Violation
Delphi常見的運行期Access Violation錯誤有哪些?如何防止?


任何軟件開發都會遇到這樣的情況:你寫好程序并測試,然后到處發送,結果用戶告訴你它失敗了。


你可能考慮用編譯指令{$D}編譯你的程序——Delphi可以建立一個有助于定位Access Violation錯誤的

源代碼的鏡像文件。工程選項對話框(Project|Options|Linker & Compiler)讓你指定你所需要的一切

。對于單元文件,debug信息和單元的對象代碼一起記錄在unit文件里了。編譯使用這個單元的程序時,

debug信息會增加單元文件的大小而且會增加額外的內存開銷,但是它不會影響最終可執行文件的大小和

運行速度。包含debug信息和鏡像文件(Project|Options|Linker)選項的產品只有在{$D+} 編譯指令下

才會完成行信息。
Access violation通常只在程序的某一個方面表現出來。當問題第一次出現時,考慮一下用戶進行了什

么操作是很重要的,然后從這里尋找突破口。從用戶的角度來看,你的程序中止了他們的工作,由他們

來告訴你出現的問題似乎讓你延期解決這個問題了。然而,與用戶交流是你發現問題和改善程序的惟一

有效方法。

現在你將可以知道在只給你沖突地址的情況下,如何輕松發現準確路徑、源代碼文件、發生Access

violation錯誤的行:
“Search - Find Error…”。

當一個運行期Access violation出現時,你的用戶得到的錯誤信息類似于如下情況:
Access violation at address <十六進制值>
in module <應用程序名>
Read of address <十六進制值>

如果你的程序在Delphi IDE里包含debug信息編譯,你可以定位到導致這個錯誤源代碼這一行。
在Delphi程序中,一個最普遍導致Access Violation錯誤的原因是使用了一個沒有被創建的對象。如果

第二個地址<十六進制值>是FFFFFFF或0000000,十有八九就是你訪問? 了一個沒有被建立的對象。例如

,你調用了一個表單的事件,但這個表單不是自動創建的,也沒有代碼實例化。

?procedure TfrMain.OnCreate(Sender: TObject);
var BadForm: TBadForm;
begin
//這里將會產生Access violation
BadForm.Refresh;
end;
假設BadForm在工程選項“Available Forms”窗口列表里——這個窗口是需要手工創建和釋放的。在上

面的代碼里調用BadForm窗口的Refresh方法就會導致Access violation。

如果你在Debugger選項窗口使“Stop on Delphi Exceptions”生效,那么就會彈出下面的信息:
The message states that the EAccessViolation has occurred. The EAccessViolation is the

exception class for invalid memory access errors.
這是你在設計程序時將會看到的信息,下一個信息框將會出現,然后程序失敗了:
Access violation at address 0043F193
in module ’Project1.exe’
Read of address 000000.
第一個十六進制數0043F193是發生Access violation的編譯代碼(Project1.exe)的運行期錯誤的地址

。在IDE里選擇菜單項“Search|Find Error…”,在對話框里輸入錯誤發生的地址(0043F193)后點擊

“OK”按鈕。Delphi將會重新編譯你的工程文件,然后顯示發生運行期錯誤的那一行代碼,這里就是

BadForm.Refresh這一行了。
下面列出了Delphi環境下導致Access violation錯誤的大部分常見原因。這個列表不是也不可能覆蓋所

有可能出現的Access violation的情況。請在論壇上發送你的Access violation信息,大家可以試著一

起解決這個問題——真正的實際事例一般情況下比列出來的錯誤隱晦得多。
1. 調用一個不存在的對象
如上所述,大部分Access violation的合理原因是使用了沒有被創建或者已經被釋放的對象。為了防止

這種類型的Access violation的發生,請確保你訪問的任何對象都首先被創建了。例如,當一個Table定

位在一個沒有被創建的data module(從auto-crete窗口里移走了)里,你可能在窗體的OnCreate事件里

打開這個表。
在下面的代碼里,在調用一個已經被刪除了的對象(b:TBitmap)事件后,一個Access violation出現了


var b:TBitmap;
begin
b:=TBitmap.Create;
try
//對b對象進行一些操作
finally
b.free;
end;
...
//由于b已經被釋放,一個Access violation錯誤將會出現
b.Canvas.TextOut(0,0,’這是一個 Access Violation’);
end;
2. 不存在的API參數
如果你試圖給Win API函數傳遞一個不存在的參數將會出現一個Access violation錯誤。解決此類Access

violation錯誤的最好方法是查閱Win API幫助,看看這個API函數調用的參數信息以及參數類型。例如,

總是保證不給一個緩沖參數傳遞一個無效指針。
3. 讓Delphi釋放
當一個對象擁有另一個對象時,讓它給你做刪除工作。因為默認情況下,所有的窗體(自動創建的)都

屬于Application對象。當一個應用程序結束時,它釋放了Application對象,也就釋放了所有窗體。例

如,如果你在程序開始時自動創建了兩個窗體(Form1/Unit1和Form2/Unit2),下面的代碼就會導致

Access violation錯誤的出現:
unit Unit1;
...
uses unit2;
...
procedure TForm1.Call_Form2
begin
Form2.ShowModal;
Form2.Free;
//Access violation錯誤將會出現
Form2.ShowModal;
end;
4. 殺死異常
永遠不要破壞臨時異常對象(E),處理一個異常會自動釋放異常對象。如果你自己手動釋放了異常對象

,程序會試圖再次釋放它,那么就會出現Access violation錯誤:
Zero:=0;
try
dummy:= 10 / Zero;
except
on E: EZeroDivide do
MessageDlg(’不能用0做除數!’,mtError, [mbOK], 0);
E.free. Access violation錯誤將會出現
end;
5. 檢索一個空字符串
一個空字符串是沒有任何數據的。就是說,檢索一個空字符串相當于訪問一個不存在的對象,這將導致

Access violation錯誤:
var s: string;
begin
s:=’’;
s[1]:=’a’;
//Access violation錯誤將會出現
end;
6. 直接引用指針
你必須間接引用指針,否則你會改變指針地址并可能會破壞其他存儲單元 :
procedure TForm1.Button1Click(Sender: TObject);
var
p1 : pointer;
p2 : pointer;
begin
GetMem(p1, 128);
GetMem(p2, 128);
//下一行導致Access violation錯誤
Move(p1, p2, 128);
//下一行方法正確
Move(p1^, p2^, 128);
FreeMem(p1, 128);
FreeMem(p2, 128);
end;
這些就是我對運行期Access Violation錯誤的全部建議,我希望你們也能對你們程序出現的Access

Violation錯誤提出一些看法。

總結

以上是生活随笔為你收集整理的access violation at address in module Read of address的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久午夜视频 | 依人综合 | 欧美黑人巨大xxx极品 | 打屁股无遮挡网站 | 放荡的少妇2欧美版 | 91精品久久久久久久99蜜桃 | 91操操操| 爱爱爱网 | 亚洲熟妇色自偷自拍另类 | 日韩七区 | 天天天干干干 | 亚洲久久一区二区 | 欧美不卡在线观看 | 国产成人精品女人久久久 | 草逼视频免费看 | 爱情岛av | 国产人与禽zoz0性伦 | 风间由美一区二区三区 | 黄色a级免费 | 美女草逼视频 | 成人性视频网 | 综合精品视频 | 国产精品久久久久一区二区 | 欧美一级性片 | 国产精品日日夜夜 | 狠狠干视频网 | 天天躁日日躁狠狠很躁 | 亚洲国产成人一区 | 操穴网站 | 欧美日韩色视频 | 韩国三级做爰视频 | 打美女屁股网站 | 99视频久 | 亚洲三区在线 | 五月婷在线视频 | 青青草黄色 | 亚洲国产三区 | 色网站入口 | 亚洲不卡一区二区三区 | 99re国产精品| 三级视频黄色 | 欧美色频 | 欧美日韩一区二区视频在线观看 | 国产av无码专区亚洲av毛片搜 | 伊人黄色网 | 成人免费一级视频 | a级黄色片 | 精品毛片 | 围产精品久久久久久久 | 国产欧美一区二区在线观看 | 丝袜视频在线观看 | 性做久久久久久久免费看 | h在线播放| www.色人阁.com | 新婚夫妇白天啪啪自拍 | 夜色视频在线观看 | 亚洲成人免费在线观看 | 特级毛片在线播放 | 久久九九精品视频 | 亚洲第九十九页 | 怎么可能高潮了就结束漫画 | a∨鲁丝一区鲁丝二区鲁丝三区 | 国产一区二区三区黄 | 女人16一毛片 | 亚洲成人国产 | 日韩久久高清 | 男人的天堂99 | 91国偷自产一区二区三区观看 | 成人免费观看a | 黄色网址在线免费 | 中文字幕av一区二区三区谷原希美 | 婷婷丁香综合 | 中文字幕在线观看免费视频 | 蜜臀av色欲a片无码精品一区 | 都市激情校园春色 | 亚洲精品a | aa黄色片| 中文字幕第5页 | 91色在线| 丰满少妇一区二区 | 国产精品成人网站 | 色播综合网 | 成人做爰视频www | 麻豆影视在线 | 欧美极品在线观看 | 超碰免费公开 | 成人高潮片免费 | 国产婷婷一区二区三区久久 | 少妇人妻一区二区 | 欧美午夜剧场 | 又色又爽又高潮免费视频国产 | 中国黄色a级 | 手机在线一区二区 | 波多野结衣丝袜 | 国产精品福利在线观看 | melody在线高清免费观看 | 2020自拍偷拍 | 一级特黄妇女高潮2 | 日韩在线播放一区 |