C 之try catch 異常處理入門例項

2022-09-28 09:27:09 字數 1702 閱讀 2771

在程式設計過程中,我們總是希望自己設計的程式是天衣無縫的,但這幾乎又是不可能的。即使程式編譯通過,同時也實現了所需要的功能,也並不代表程式就已經完美無缺了,因為執行程式時還可能會遇到異常,例如當我們設計乙個為使用者計算除法的程式時,使用者很有可能會將除數輸入為零,又例如當我們需要開啟乙個檔案的時候確發現該檔案已經被刪除了……類似的這種情況很有很多,針對這些特殊的情況,不加以防範是不行的。

我們通常希望自己編寫的程式能夠在異常的情況下也能作出相應的處理,而不至於程式莫名其妙地中斷或者中止執行了。在設計程式時應充分考慮各種異常情況,並加以處理。

在c++中,乙個函式能夠檢測出異常並且將異常返回,這種機制稱為丟擲異常。當丟擲異常後,函式呼叫者捕獲到該異常,並對該異常進行處理,我們稱之為異常捕程式設計客棧獲。

c++新增throw關鍵字用於丟擲異常,新增catch關鍵字用於捕獲異常,新增try關鍵字嘗試捕獲異常。通常將嘗試捕獲的語句放在 try 程式塊中,而將異常處理語句置於 catch 語句塊中。

異常處理的基本語法如下所述。首先說一下丟擲異常的基本語法:

throw 表示式;

丟擲異常由throw關鍵字加上乙個表示式構成。丟擲異常後需要捕獲異常以及異常處理程式,其基本語法如下:

trycatch (異常型別1)

catch (異常型別2)

// ……

catch (異常型別n)

由try程式塊捕獲throw丟擲的異常,然後依據異常型別執行catch程式塊中的異常處理程。catch程式塊順序可以是任意的,不過均需要放在try程式塊之後。

[例1] c++異常處理示例:

#include

using namespace std;

enum index;

int array_index(int *a, int n, int index);

int main()

本例展示了乙個陣列越界的異常捕獲程式。array_index函式用於返回陣列index下標的數值,如果出現異常則丟擲異常。try程式塊中的程式語句為可能出現異常情況的語句,catch則為針對異常的處理語句。在程式一開始我們定義了乙個全域性的列舉型別變數index,並且定義了兩個值,分別為underflow和overflow,這兩個值作為丟擲異常的返回值。當在主函式要求輸出越界的陣列值時,呼叫array_index函式,一旦有預定異常丟擲,則通過try捕獲並根據catch語句針對異常情況作出處理。

在前面我們介紹了new和delete動態分配記憶體操作符,如果new或new不能成功分配所請求的,將會丟擲乙個bad_alloc異常。在使用new或new操作符分配動態記憶體,可以通過如下方式檢測並捕獲儲存空間分配失敗的異常。

[例2] 捕獲new、new 丟擲的異常:

int * p;

trycatch(bad_alloc)

catch(...)

} void testdoubletype()

catch(...)

} void testemptypointtype()

catch(...)

} void testdivzerotype()

catch(...)

} void testmemoryouttype()

*a = 3;

} catch(...)

} int main(int程式設計客棧 argc, char* ar**)

本文標題: c++之try catch 異常處理入門例項

本文位址:

c 異常處理 try catch

初學 try catch 語法 try try和catch之間不能有其他的 catch 技巧 console.writeline 你的語文成績?int chainese 0 宣告變數再初始化賦值為0,因為在try中宣告作用域只能在try中的大括號中有效.bool chaineseexecption ...

C 異常處理入門

先看如下 void test02 當你在main 中呼叫test02 時,很明顯會出現如下錯誤 因為除數不能為0,所以執行a b時就會引發錯誤,然後程式就自動停止了。有無錯誤就停止,這到沒什麼,關鍵是這種使用者體驗不是很好,你想一下,當程式執行好好的時候,遇到錯誤,就彈出這麼乙個視窗,然後程式就終止...

try catch異常處理

目的 防止編譯期異常 支援的格式 trycatch 異常型別 變數名 finally 變形1 trycatch 異常型別 變數名 變形2 分別處理不同的異常型別。trycatch 異常型別 變數名 catch 異常型別2 變數名 catch 異常型別3 變數名 catch 異常型別4 變數名 變形3...