綠色(sè)資源(yuán)網(wǎng):您身邊最放心的安全下載站! 最(zuì)新軟件|熱門排行|軟件分類|軟件(jiàn)專題|廠商大全

綠(lǜ)色資源網

技術教程
您的位置:首頁電(diàn)腦醫院係統故障 → 提示access violation at address解決辦法

提示(shì)access violation at address解決辦(bàn)法

我要評論 2013/08/02 14:28:15 來源:綠色資(zī)源網 編輯:www.ynaad.com [ ] 評論:0 點擊:2683次

解決方法:
  右擊“我的電腦(nǎo)”。單擊“屬性”。
  在“係統屬性(xìng)”中單擊“高級”。
  在“性能(néng)”中(zhōng)單擊“設置”。
  在“性能選項”中單擊“數據執(zhí)行保護”。
  單擊“添加”。選擇要運行的程序(xù)。
  OK。就這麽簡單(dān)。

Access Violation(非法訪問)錯誤的解決方法

Access Violation(非法訪問),General Protection Fault(一(yī)般保護性錯誤)或者Invalid Page Fault(無效頁麵(miàn)錯誤),雖然說法不一樣,但本質上總是由同一種錯誤引起的。Access Violation常常在計算機用戶運行的程序試圖存取未被指(zhǐ)定使用的存儲區時遇到。
Access violation at address <十六進製值>
in module <應用(yòng)程序名>
Read of address <十六進製(zhì)值>
  Windows用戶可能經常會看到類似於錯誤提示:“Error:Access violation at address 836556F8(004096da). Read of address 836556F8(00401000)”。作為一個Delphi程序開發者,遇到這種錯誤的機會比其他用戶更多(^_^)。
  一旦Windows要在它被分配的存儲區之外寫數據信息,它就會覆蓋其他程序甚至操(cāo)作係統(tǒng)的命令或數據。一旦發生了這種情(qíng)況,操作係統將會癱瘓或者以某(mǒu)種形式關閉,你必須重(chóng)新啟動計算機。例如,在Windows NT/2000下一(yī)個(gè)程序遇到這種錯誤時,Dr. Watson出現並且停止了該程序,捕獲(huò)了一些快速的細節狀態,再把它們用文本形式(shì)記錄(lù)下來。Access Violation是某些最令人氣惱的Windows程序遇到的錯(cuò)誤之一。本文的目的就是讓你找到Delphi中Access Violation的解決之道。首先聲明一點,Access Violation和Microsoft Access沒有(yǒu)任何關係。

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

一、設計期的Access Violation

1.硬件原因
  在啟動或關閉(bì)Delphi IDE以及編譯一個Delphi工程時容易出現設計(jì)期的Access Violation。在(zài)你的計算機(jī)運行中出(chū)現Access Violation信息可能(néng)由各種(zhǒng)各樣的(de)原因引起,包括係統Bioses、操作係統或者是硬件驅動線,有些聲卡(kǎ)、顯卡、網(wǎng)卡(kǎ)實際上也會(huì)導致(zhì)這(zhè)種錯誤。為什麽這麽說?計算機裏的每一塊卡都有它的設備驅(qū)動程序。對於不同的製(zhì)造商、不同(tóng)版本的(de)Windows或者不(bú)同(tóng)版(bǎn)本(běn)的(de)Delphi都可能會遇到(dào)不同的問題。如下的幾個步(bù)驟可能有助於你解決(jué)遇到的(de)這些問題:

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

  2. 有時降低顯示分辨率可能會使某些古怪的顯(xiǎn)卡驅(qū)動程序(xù)穩定一些。

  3. 如果(guǒ)使用雙處理(lǐ)器的主板,則保證對每個處理器的修改步驟一樣。

  4. 對於計算機上的所有硬件注意使用最新的驅動程(chéng)序。

2.軟件原(yuán)因
  盡管Intel的計算(suàn)機中Windows是最流行的操作係統,由於Windows係統(tǒng)天生的脆弱性和BUG,應用(yòng)程(chéng)序(xù)的(de)誤操(cāo)作可能導致操作係統的迅速癱瘓(有時操作係統本身也會莫名其妙的癱(tān)瘓)。選(xuǎn)擇一個更(gèng)穩定的程序開發環境是(shì)解(jiě)決之道,如下幾個步(bù)驟可以幫助你防止某些Access Violation的發生:

  (1)盡管Windows 9X相當流行,Windows NT/2000還是從多方麵被證(zhèng)實(shí)是一個穩定得多的環境,幾乎對於所有的Windows代碼平台而(ér)言都是這(zhè)樣。

(2) 確保對(duì)於Windows NT/2000已經安裝了最新的service pack。每次安裝完新(xīn)版的service pack,你會發現機器(qì)變得穩(wěn)定了。

(3) 為你使用的各種版本的Delphi裝上當前的更新或補丁(BDE、ADO……),這是提前預防錯誤的好辦法。盡量使用最新的Delphi補丁——Access Violation錯誤數量尤其是設計期(qī)的錯誤(wù)數會大大減少。

(4)如果你在(zài)IDE中(zhōng)經常隨(suí)機遇到Access Violation錯誤,很有可能是你安裝了一個不好的控件、包或者一個向導,它不是你使用的版(bǎn)本的Delphi所編寫或編譯的。試著一個(gè)一(yī)個卸載定製的控件(jiàn)(或者包)直到問題被解決,然後聯係控件(jiàn)廠商關注這個問題的結(jié)果。

(5) 檢查一下計算機裏是否有沒用的東西和程序衝突(tū)。奇怪的軟件程序和測試版的產品常常會導致Access Violation錯誤。

(6) 如(rú)果(guǒ)係統設置(zhì)有錯(cuò)誤,那麽Access Violation錯誤可能也會經常出現。如果你不停(tíng)地遇到一個錯誤提(tí)示信息一樣的Access Violation,記錄下這些(xiē)細節(jiē),然後通知可能導致(zhì)這個錯誤的軟件製造廠商。
這(zhè)些(xiē)就是我對設計期Access Violation錯誤的全部(bù)建議。

二、運行期的Access Violation
Delphi常見的運行期Access Violation錯誤有哪(nǎ)些(xiē)?如何防止?

任何軟件開發都會遇到這(zhè)樣的情況:你寫(xiě)好程序並測試,然後到處發送,結果用戶告訴你它失敗了。

你可能(néng)考慮用編譯(yì)指令{$D}編譯你的程序(xù)——Delphi可以建立一個有助於定(dìng)位Access Violation錯誤的源(yuán)代碼的(de)鏡(jìng)像文件。工(gōng)程選項對話框(Project|Options|Linker & Compiler)讓你指定你所需要的一切。對於單(dān)元文件(jiàn),debug信息和單元的對象代碼一起記錄在unit文件裏了。編譯使用這個單元的程序時,debug信息會增加單元文件的大小而且會增加額外的內存開銷,但(dàn)是它不會影響(xiǎng)最終可執行文件的大小和運行速度(dù)。包含debug信息和鏡像文件(Project|Options|Linker)選項的產品隻有在{$D+} 編譯指令下才(cái)會完成行信息。

Access violation通常隻在(zài)程序的某一個方麵(miàn)表現出來。當問題第一次出(chū)現時,考慮一下用戶進行了什麽(me)操作是很重要的,然(rán)後(hòu)從這裏尋找突破口。從用戶的角度來看,你的程序中止了他們的工作,由他們來告訴(sù)你出現的問題似乎讓你延期解決這(zhè)個(gè)問(wèn)題了。然而,與用(yòng)戶交流是你發現問題和(hé)改善程序的惟一有效方法。

現在你將可以知道在隻給你衝突地址的情況下,如何輕鬆發現準確路徑、源代碼文件(jiàn)、發生Access violation錯誤的行:
“Search - Find Error…”。

當一個運(yùn)行期(qī)Access violation出現時,你的用戶得到的錯誤信息類似於如下(xià)情況:
Access violation at address <十六進製值>
in module <應用程序名>
Read of address <十六進製值>

如果你的程序在Delphi IDE裏包含(hán)debug信息編譯,你(nǐ)可以定位到導致這個錯誤源代碼這一行。
在Delphi程序中,一個最普遍導致Access Violation錯誤的(de)原因是使用了一個沒有被創建的對象。如果第(dì)二個地址<十六(liù)進製值>是FFFFFFF或0000000,十有八九就是(shì)你訪問? 了一個沒有(yǒu)被建立的對象。例如,你調用了一個表單(dān)的事件,但這個表單(dān)不是自動創建的,也沒有代碼實例化(huà)。

?procedure TfrMain.OnCreate(Sender: TObject);
var BadForm: TBadForm;
begin
//這裏將(jiāng)會產生Access violation
BadForm.Refresh;
end;

假設BadForm在工程選項“Available Forms”窗口列(liè)表裏(lǐ)——這個窗口是(shì)需要手工創建和釋放(fàng)的。在上麵的代碼裏調用BadForm窗口的Refresh方法就會導致Access violation。

如果你(nǐ)在Debugger選項窗口使“Stop on Delphi Exceptions”生(shēng)效(xiào),那麽就會彈出(chū)下麵的信息:
The message states that the EAccessViolation has occurred. The EAccessViolation is the exception class for invalid memory access errors.

這是你在設計程序時將(jiāng)會看到的信息,下一個信(xìn)息框將會(huì)出現(xiàn),然後程序失敗了:
Access violation at address 0043F193
in module ’Project1.exe’
Read of address 000000.

第一個十(shí)六進製數0043F193是發生Access violation的編譯代碼(Project1.exe)的運行期錯(cuò)誤的地址。在IDE裏選擇菜單項“Search|Find Error…”,在對話(huà)框裏輸入錯誤發生的地址(0043F193)後點擊“OK”按(àn)鈕。Delphi將會重新(xīn)編譯你的工程文件,然後顯示發生運行期錯誤的那一行代碼(mǎ),這裏就是(shì)BadForm.Refresh這一行了。

下麵列出了Delphi環境下導致Access violation錯誤的大部分常(cháng)見原因。這個(gè)列表不是也不可能覆蓋所有可能出現的Access violation的情況。請在論壇上發送你的(de)Access violation信息,大(dà)家可以試著(zhe)一起解決這(zhè)個問題——真正的實際事例一般情況下比列出來的錯(cuò)誤隱晦(huì)得多。

1. 調用一個(gè)不存在的對象
如上所述,大部分Access violation的合理原因是使用了沒有被(bèi)創(chuàng)建(jiàn)或者已(yǐ)經(jīng)被釋(shì)放的對(duì)象。為了防止這種(zhǒng)類型的Access violation的發生,請確保你(nǐ)訪問的任何對象都首先被創建了。例如,當一個(gè)Table定位在一個沒有被創建的data module(從auto-crete窗口裏移走了)裏,你可能在窗體的OnCreate事件裏打開這個(gè)表。

在下麵的代碼裏,在調用一個已(yǐ)經被刪(shān)除了的對(duì)象(b:TBitmap)事件後,一個(gè)Access violation出(chū)現了:
var b:TBitmap;
begin
b:=TBitmap.Create;
try
//對b對象進行一些操作
finally
b.free;
end;
...
//由於b已(yǐ)經被(bèi)釋放,一個Access violation錯誤將會出現
b.Canvas.TextOut(0,0,’這是一個 Access Violation’); <

關鍵(jiàn)詞:解決辦法,access,violation

閱讀本文後您有什麽感想? 已有 人給出評價!

  • 14 歡迎喜(xǐ)歡
  • 14 白癡
  • 14 拜托(tuō)
  • 14 哇
  • 14 加(jiā)油
  • 14 鄙視
免费人欧美成又黄又爽的视频丨一本色道久久88综合日韩精品丨国产专区日韩精品欧美色丨午夜无遮挡男女啪啪视频丨国产欧美日韩综合精品一区二区丨亚洲精品无码不卡在线播HE丨亚洲精品国产精品国自产观看丨日韩国产高清av不卡