12.1.1 運(yùn)行時(shí)間庫異常類(RTL Exception)
運(yùn)行時(shí)間庫異?梢苑譃槠哳悾鼈兌级x在SysUtils庫單元中。
12.1.1.1 I/O異常
I/O異常類EInOutError是在程序運(yùn)行中試圖對文件或外設(shè)進(jìn)行操作失敗后產(chǎn)生的,它從Exception派生后增加了一個(gè)公有數(shù)據(jù)成員ErrorCode,用于保存所發(fā)生錯(cuò)誤的代碼。這一成員可用于在發(fā)生I/O異常后針對不同情況采取不同的對策。
當(dāng)設(shè)置編譯指示{$I- } 時(shí),不產(chǎn)生I/O異常類而是把錯(cuò)誤代碼返回到預(yù)定義變量IOResult中。
12.1.1.2 堆異常
堆異常是在動(dòng)態(tài)內(nèi)存分配中產(chǎn)生的,包括兩個(gè)類EOutOfMemory和EInvalidPointer。
表12.1 堆異常類及其產(chǎn)生原因
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
異常類 引發(fā)原因
─────────────────────────────────
EOutOfMemory 沒有足夠的空間用于滿足所要求的內(nèi)存分配
EInvalidPointer 非法指針。一般是由于程序試圖去釋放一個(gè)業(yè)已釋放的指針而引起的
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
12.1.1.3 整數(shù)異常
整數(shù)異常都是從一個(gè)EIntError類派生的,但程序運(yùn)行中引發(fā)的總是它的子類:EDivByZero,ERangeError,EIntOverFlow。
表12.2 整數(shù)異常及其產(chǎn)生原因
━━━━━━━━━━━━━━━━━━━━━
異常類 引發(fā)原因
─────────────────────
EDivByZero 試圖被零除
ERangeError 整數(shù)表達(dá)式越界
EIntOverFlow 整數(shù)操作溢出
━━━━━━━━━━━━━━━━━━━━━━
ERangeError當(dāng)一個(gè)整數(shù)表達(dá)式的值超過為一個(gè)特定整數(shù)類型分配的范圍時(shí)引發(fā)。比如下面一段代碼將引發(fā)一個(gè)ERangeError異常。
var
SmallNumber: ShortInt;
X , Y: Integer;
begin
X := 100;
Y := 75;
SmallNumber := X * Y;
end;
特定整數(shù)類型包括ShortInt、Byte以及與整數(shù)兼容的枚舉類型、布爾類型等。例如:
type
THazard = ( Safety , Marginal , Critical , Catastrophic );
var
Haz: THazard;
Item: Integer;
begin
Item:= 4;
Haz:= THazard ( Item );
end;
由于枚舉數(shù)越界而引發(fā)一個(gè)ERangeError異常。
數(shù)組元素越界也會(huì)引發(fā)一個(gè)ERangeError異常,如:
var
Values: array[1..10] of Integer;
i: Integer;
begin
for i := 1 to 11 do
Values[i] := i;
end;
ERangeError異常只有當(dāng)類型檢查打開時(shí)才會(huì)引發(fā)。這可以在代碼中包含{$R+} 編譯指示或設(shè)置IDE Option|Project的Range_Checking Option選擇框。
EIntOverFlow異常類在Integer、Word、Longint三種整數(shù)類型越界時(shí)引發(fā)。如:
var
I : Integer;
a,b,c : Word;
begin
a := 10;
b := 20;
c := 1;
for I := 0 to 100 do
begin
c := a*b*c;
end;
end;
引發(fā)一個(gè)EIntOverFlow異常。
EIntOverFlow異常類只有在編譯選擇框Option|Project|Over_Flow_Check Option選中時(shí)才產(chǎn)生。當(dāng)關(guān)閉溢出檢查,則溢出后變量保留該類整數(shù)的最大范圍值。
相關(guān)推薦:2010年9月計(jì)算機(jī)等級考試試題及答案解析專題北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |