![AV錯(cuò)誤常用解決方法四_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/7/efe7187e-4d86-4693-bf24-0c9568319dad/efe7187e-4d86-4693-bf24-0c9568319dad1.gif)
![AV錯(cuò)誤常用解決方法四_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/7/efe7187e-4d86-4693-bf24-0c9568319dad/efe7187e-4d86-4693-bf24-0c9568319dad2.gif)
![AV錯(cuò)誤常用解決方法四_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/7/efe7187e-4d86-4693-bf24-0c9568319dad/efe7187e-4d86-4693-bf24-0c9568319dad3.gif)
![AV錯(cuò)誤常用解決方法四_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/7/efe7187e-4d86-4693-bf24-0c9568319dad/efe7187e-4d86-4693-bf24-0c9568319dad4.gif)
![AV錯(cuò)誤常用解決方法四_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/7/efe7187e-4d86-4693-bf24-0c9568319dad/efe7187e-4d86-4693-bf24-0c9568319dad5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、AV錯(cuò)誤常用解決方法四 Violation(非法訪問(wèn))General rotection Fault(一般保護(hù)性錯(cuò)誤)或者Invalid age Fault(無(wú)效頁(yè)面錯(cuò)誤)雖然說(shuō)法不一樣但本質(zhì)上總是由同一種錯(cuò)誤引起的。Access Violation常常在計(jì)算機(jī)用戶運(yùn)行的程序試圖存取未被指定使用的存儲(chǔ)區(qū)時(shí)遇到。 Access violation at address <十六進(jìn)制值> in module <應(yīng)用程序名> Read of address <十六進(jìn)制值>Windows用戶可能經(jīng)常會(huì)看到類似于錯(cuò)誤提示:
2、“Error:Access violation at address 836556F8(004096da). Read of address 836556F8(00401000)”。作為一個(gè)Delhi程序開發(fā)者遇到這種錯(cuò)誤的機(jī)會(huì)比其他用戶更多(_)。一旦Windows要在它被分配的存儲(chǔ)區(qū)之外寫數(shù)據(jù)信息它就會(huì)覆蓋其他程序甚至操作系統(tǒng)的命令或數(shù)據(jù)。一旦發(fā)生了這種情況操作系統(tǒng)將會(huì)癱瘓或者以某種形式關(guān)閉你必須重新啟動(dòng)計(jì)算機(jī)。例如在Windows NT/2000下一個(gè)程序遇到這種錯(cuò)誤時(shí)Dr. Watson出現(xiàn)并且停止了該程序捕獲了一些快速的細(xì)節(jié)狀態(tài)再把它們用文本形式記錄下來(lái)。Access Violati
3、on是某些最令惱的Windows程序遇到的錯(cuò)誤之一。本文的目的就是讓你找到Delhi中Access Violation的解決之道。首先聲明一點(diǎn)Access Violation和Microsoft Access沒(méi)有任何關(guān)系。用Delhi開發(fā)程序時(shí)我們可以把遇到的Access Violation分成兩大類:運(yùn)行期和設(shè)計(jì)期。 一、設(shè)計(jì)期的Access Violation 1.硬件原因 在啟動(dòng)或關(guān)閉Delhi IDE以及編譯一個(gè)Delhi工程時(shí)容易出現(xiàn)設(shè)計(jì)期的Access Violation。在你的計(jì)算機(jī)運(yùn)行中出現(xiàn)Access Violation信息可能由各種各樣的原因引起包括系統(tǒng)BIOS、操作系統(tǒng)或
4、者是硬件驅(qū)動(dòng)線有些聲卡、顯卡、卡實(shí)際上也會(huì)導(dǎo)致這種錯(cuò)誤。為什么這么說(shuō)?計(jì)算機(jī)里的每一塊卡都有它的設(shè)備驅(qū)動(dòng)程序。對(duì)于不同的制造商、不同版本的Windows或者不同版本的Delhi都可能會(huì)遇到不同的問(wèn)題。如下的幾個(gè)步驟可能有助于你解決遇到的這些問(wèn)題: 1. 按照必要的步驟來(lái)證實(shí)你安裝的驅(qū)動(dòng)程序之間沒(méi)有沖突。 2. 有時(shí)降低顯示分辨率可能會(huì)使某些古怪的顯卡驅(qū)動(dòng)程序穩(wěn)定一些。 3. 如果使用雙處理器的主板則保證對(duì)每個(gè)處理器的修改步驟一樣。 4. 對(duì)于計(jì)算機(jī)上的所有硬件注意使用最新的驅(qū)動(dòng)程序。 2.軟件原因 盡管Intel的計(jì)算機(jī)中Windows是最流行的操作系統(tǒng)由于Windows系統(tǒng)天生的脆弱性和BU
5、G應(yīng)用程序的誤操作可能導(dǎo)致操作系統(tǒng)的迅速癱瘓(有時(shí)操作系統(tǒng)本身也會(huì)莫名其妙的癱瘓)。選擇一個(gè)更穩(wěn)定的程序開發(fā)環(huán)境是解決之道如下幾個(gè)步驟可以幫助你防止某些Access Violation的發(fā)生: (1)盡管Windows 9X相當(dāng)流行Windows NT/2000 還是從多方面被證實(shí)是一個(gè)穩(wěn)定得多的環(huán)境幾乎對(duì)于所有的Windows代碼平臺(tái)而言都是這樣。 (2) 確保對(duì)于Windows NT/2000已經(jīng)安裝了最新的service ack。每次安裝完新版的service ack你會(huì)發(fā)現(xiàn)機(jī)器變得穩(wěn)定了。 (3) 為你使用的各種版本的Delhi裝上當(dāng)前的更新或補(bǔ)?。˙DE、ADO)這是提前預(yù)防錯(cuò)誤的好
6、辦法。盡量使用最新的Delhi補(bǔ)丁Access Violation錯(cuò)誤數(shù)量尤其是設(shè)計(jì)期的錯(cuò)誤數(shù)會(huì)大大減少。 (4)如果你在IDE中經(jīng)常隨機(jī)遇到Access Violation錯(cuò)誤很有可能是你安裝了一個(gè)不好的控件、包或者一個(gè)向?qū)皇悄闶褂玫陌姹镜腄elhi所編寫或編譯的。試著一個(gè)一個(gè)卸載定制的控件(或者包)直到問(wèn)題被解決然后聯(lián)系控件商關(guān)注這個(gè)問(wèn)題的結(jié)果。 (5) 檢查一下計(jì)算機(jī)里是否有沒(méi)用的東西和程序沖突。奇怪的軟件程序和測(cè)試版的產(chǎn)品常常會(huì)導(dǎo)致Access Violation錯(cuò)誤。 (6) 如果系統(tǒng)設(shè)置有錯(cuò)誤那么Access Violation錯(cuò)誤可能也會(huì)經(jīng)常出現(xiàn)。如果你不停地遇到一個(gè)錯(cuò)誤提示
7、信息一樣的Access Violation記錄下這些細(xì)節(jié)然后通知可能導(dǎo)致這個(gè)錯(cuò)誤的軟件制造商。 這些就是我對(duì)設(shè)計(jì)期Access Violation錯(cuò)誤的全部建議。 二、運(yùn)行期的Access Violation Delhi常見(jiàn)的運(yùn)行期Access Violation錯(cuò)誤有哪些?如何防止?任何軟件開發(fā)都會(huì)遇到這樣的情況:你寫好程序并測(cè)試然后到處發(fā)送結(jié)果用戶告訴你它失敗了。你可能考慮用編譯指令$D編譯你的程序Delhi可以建立一個(gè)有助于定位Access Violation錯(cuò)誤的源代碼的鏡像文件。工程選項(xiàng)對(duì)話框(roject|Otions|Linker &am; Comiler)讓你指定你所需
8、要的一切。對(duì)于單文件debug信息和單的對(duì)象代碼一起記錄在unit文件里了。編譯使用這個(gè)單的程序時(shí)debug信息會(huì)增加單文件的大小而且會(huì)增加額外的內(nèi)存開銷但是它不會(huì)影響最終可執(zhí)行文件的大小和運(yùn)行速度。包含debug信息和鏡像文件(roject|Otions|Linker)選項(xiàng)的產(chǎn)品只有在$D+ 編譯指令下才會(huì)完成行信息。Access violation通常只在程序的某一個(gè)方面表現(xiàn)出來(lái)。當(dāng)問(wèn)題第一次出現(xiàn)時(shí)考慮一下用戶進(jìn)行了什么操作是很重要的然后從這里尋找突破口。從用戶的角度來(lái)看你的程序中止了他們的工作由他們來(lái)告訴你出現(xiàn)的問(wèn)題似乎讓你延期解決這個(gè)問(wèn)題了。然而與用戶交流是你發(fā)現(xiàn)問(wèn)題和改善程序的惟一有
9、效方法。現(xiàn)在你將可以知道在只給你沖突的情況下如何輕松發(fā)現(xiàn)準(zhǔn)確徑、源代碼文件、發(fā)生Access violation錯(cuò)誤的行: “Search - Find Error”。當(dāng)一個(gè)運(yùn)行期Access violation出現(xiàn)時(shí)你的用 戶得到的錯(cuò)誤信息類似于如下情況: Access violation at address <十六進(jìn)制值> in module <應(yīng)用程序名> Read of address <十六進(jìn)制值>如果你的程序在Delhi IDE里包含debug信息編譯你可以定位到導(dǎo)致這個(gè)錯(cuò)誤源代碼這一行。 在De
10、lhi程序中一個(gè)最普遍導(dǎo)致Access Violation錯(cuò)誤的原因是使用了一個(gè)沒(méi)有被創(chuàng)建的對(duì)象。如果第二個(gè)<十六進(jìn)制值>是FFFFFFF或0000000十有八九就是你訪問(wèn)? 了一個(gè)沒(méi)有被建立的對(duì)象。例如你調(diào)用了一個(gè)表單的事件但這個(gè)表單不是自動(dòng)創(chuàng)建的也沒(méi)有代碼實(shí)例化。?rocedure TfrMain.OnCreate(Sender: TObject); var BadForm: TBadForm; begin /這里將會(huì)產(chǎn)生Access violation BadForm.Refresh; end;假設(shè)BadForm在工程選項(xiàng)“Available Forms”窗口
11、列表里這個(gè)窗口是需要手工創(chuàng)建和釋放的。在上面的代碼里調(diào)用BadForm窗口的Refresh方法就會(huì)導(dǎo)致Access violation。如果你在Debugger選項(xiàng)窗口使“Sto on Delhi Excetions”生效那么就會(huì)彈出下面的信息: The message states that the EAccessViolation has occurred. The EAccessViolation is the excetion class for invalid memory access errors. 這是你在設(shè)計(jì)程序時(shí)將會(huì)看到的信息下一個(gè)信息框?qū)?huì)出現(xiàn)然后程序失敗了: Acces
12、s violation at address 0043F193 in module roject1.exe Read of address 000000.第一個(gè)十六進(jìn)制數(shù)0043F193是發(fā)生Access violation的編譯代碼(roject1.exe)的運(yùn)行期錯(cuò)誤的。在IDE里選擇菜單項(xiàng)“Search|Find Error”在對(duì)話框里輸入錯(cuò)誤發(fā)生的(0043F193)后“OK”按鈕。Delhi將會(huì)重新編譯你的工程文件然后顯示發(fā)生運(yùn)行期錯(cuò)誤的那一行代碼這里就是BadForm.Refresh這一行了。下面列出了Delhi環(huán)境下導(dǎo)致Access violation錯(cuò)誤的大部分常見(jiàn)原因。這個(gè)列
13、表不是也不可能覆蓋所有可能出現(xiàn)的Access violation的情況。請(qǐng)?jiān)谡搲习l(fā)送你的Access violation信息大家可以試著一起解決這個(gè)問(wèn)題真正的實(shí)際事例一般情況下比列出來(lái)的錯(cuò)誤隱晦得多。1. 調(diào)用一個(gè)不存在的對(duì)象 如上所述大部分Access violation的合理原因是使用了沒(méi)有被創(chuàng)建或者已經(jīng)被釋放的對(duì)象。為了防止這種類型的Access violation的發(fā)生請(qǐng)確保你訪問(wèn)的任何對(duì)象都首先被創(chuàng)建了。例如當(dāng)一個(gè)Table定位在一個(gè)沒(méi)有被創(chuàng)建的data module(從auto-crete窗口里移走了)里你可能在窗體的OnCreate事件里打開這個(gè)表。在下面的代碼里在調(diào)用一個(gè)已經(jīng)
14、被刪除了的對(duì)象(b:TBitma)事件后一個(gè)Access violation出現(xiàn)了: var b:TBitma; begin b:=TBitma.Create; try /對(duì)b對(duì)象進(jìn)行一些操作 finally b.free; end; . /由于b已經(jīng)被釋放一個(gè)Access violation錯(cuò)誤將會(huì)出現(xiàn) b.Canvas.TextOut(0,0,這是一個(gè) Access Violation); end;2. 不存在的AI參數(shù) 如果你試圖給Win AI函數(shù)傳遞一個(gè)不存在的參數(shù)將會(huì)出現(xiàn)一個(gè)Access violation錯(cuò)誤。解決此類Access violation錯(cuò)誤的最好方法是查閱Win AI
15、幫助看看這個(gè)AI函數(shù)調(diào)用的參數(shù)信息以及參數(shù)類型。例如總是保證不給一個(gè)緩沖參數(shù)傳遞一個(gè)無(wú)效指針。3. 讓Delhi釋放 當(dāng)一個(gè)對(duì)象擁有另一個(gè)對(duì)象時(shí)讓它給你做刪除工作。因?yàn)槟J(rèn)情況下所有的窗體(自動(dòng)創(chuàng)建的)都屬于Alication對(duì)象。當(dāng)一個(gè)應(yīng)用程序結(jié)束時(shí)它釋放了Alication對(duì)象也就釋放了所有窗體。例如如果你在程序開始時(shí)自動(dòng)創(chuàng)建了兩個(gè)窗體(Form1/Unit1和Form2/Unit2)下面的代碼就會(huì)導(dǎo)致Access violation錯(cuò)誤的出現(xiàn): unit Unit1; . uses unit2; . rocedure TForm1.Call_Form2 begin Form2.ShowM
16、odal; Form2.Free; /Access violation錯(cuò)誤將會(huì)出現(xiàn) Form2.ShowModal; end;4. 殺死異常 永遠(yuǎn)不要破壞臨時(shí)異常對(duì)象(E)處理一個(gè)異常會(huì)自動(dòng)釋放異常對(duì)象。如果你自己手動(dòng)釋放了異常對(duì)象程序會(huì)試圖再次釋放它那么就會(huì)出現(xiàn)Access violation錯(cuò)誤: Zero:=0; try dummy:= 10 / Zero; excet on E: EZeroDivide do MessageDlg(不能用0做除數(shù)!,mtError, mbOK, 0); E.free. /Access violation錯(cuò)誤將會(huì)出現(xiàn) end;5. 檢索一個(gè)空字符串 一個(gè)空字符串是沒(méi)有任何數(shù)據(jù)的。就是說(shuō)檢索一個(gè)空字符串相當(dāng)于訪問(wèn)一個(gè)不存在的對(duì)象這將導(dǎo)致Access violation錯(cuò)誤: var s: string; begin s:=; s1:=a; /Access violation錯(cuò)誤將會(huì)出現(xiàn) end;6
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 酒店經(jīng)營(yíng)權(quán)承包合同范本
- 商標(biāo)授權(quán)使用合同范本
- 2025年度返聘退休人員企業(yè)研發(fā)與技術(shù)轉(zhuǎn)移合同
- 二零二五年度醫(yī)院聘用護(hù)士勞動(dòng)合同(護(hù)理倫理)
- 二零二五年度消防中控室值班服務(wù)與設(shè)備維護(hù)合同
- 2025年度企業(yè)市場(chǎng)營(yíng)銷人員勞務(wù)雇傭合同示范文本
- 2025年度炊事員臨時(shí)聘用合同執(zhí)行與變更管理細(xì)則
- 湘教版數(shù)學(xué)九年級(jí)下冊(cè)2.5《直線與圓的位置關(guān)系》聽評(píng)課記錄5
- 2025年度電力施工安全風(fēng)險(xiǎn)評(píng)估與整改協(xié)議
- 二零二五年度國(guó)際鐵礦石貿(mào)易加工合作協(xié)議
- 2025年度數(shù)據(jù)備份與恢復(fù)合法委托服務(wù)合同
- 《證券法培訓(xùn)》課件
- 2024年鐵嶺衛(wèi)生職業(yè)學(xué)院高職單招語(yǔ)文歷年參考題庫(kù)含答案解析
- 大班美術(shù)活動(dòng):傳統(tǒng)的節(jié)日
- 鞋類代理合作協(xié)議
- 2025理論學(xué)習(xí)計(jì)劃2025年理論中心組學(xué)習(xí)計(jì)劃
- 2025年醫(yī)美醫(yī)院公司組織架構(gòu)和業(yè)務(wù)流程
- 防滑防摔倒安全教育
- 乳腺癌課件教學(xué)課件
- 連續(xù)性腎替代治療抗菌藥物劑量調(diào)整專家共識(shí)(2024年版)解讀
- 山西省2024年中考物理試題(含答案)
評(píng)論
0/150
提交評(píng)論