C++ 程式演示異常處理


假設有一個函式計算一些複雜的數學運算。但在運算過程中,可能會發生一些異常。我們必須處理可能發生的各種型別的異常並執行以下操作。

  • 如果計算機無法為計算分配記憶體,我們必須列印“記憶體不足!”
  • 如果發生任何其他與 C++ 相關的異常,我們必須列印“異常:”,然後是異常。
  • 如果發生其他情況,我們列印“未處理的異常”。

我們得到一個包含一對值的陣列,並將其傳遞給函式。如果發生任何異常,我們處理它,否則我們列印輸出值。

我們只需要處理異常,而不用考慮生成異常的函式機制。

因此,如果輸入類似於 arr = {{361643035132, 2297873642249}, {-17, 15}};,則輸出將為 -

Memory Low!
Exception: val1 is negative

第一對值過大,無法處理,因此列印“記憶體不足”。第二對的第一個值是負數。提供的函式無法處理該值,因此會生成/丟擲異常“val1 為負數”,

為了解決這個問題,我們將遵循以下步驟 -

  • 初始化 i := 0,當 i < t 時,更新(i 增加 1),執行 -
    • val1 := values[i, 0]
    • val2 := values[i, 1]
    • 嘗試,
      • 列印(foo(val1, val2))
    • 如果無法分配記憶體(捕獲 bad_alloc 異常),則
      • 列印("記憶體不足!")
    • 否則,如果捕獲任何其他標準 C++ 異常 e,則
      • 列印("異常:")
      • 列印異常詳細資訊
    • 否則,如果捕獲任何其他異常,則
      • 列印("未處理的異常")

示例

讓我們看看以下實現以更好地理解 -

#include <iostream>
#include <exception>
#include <string>
#include <stdexcept>
#include <vector>
#include <cmath>
using namespace std;

class Solution {
private:
   static int value;
public:
   static int foo(long long val1, long long val2) {
      value += 1;
      if(val1 < 0) {
         throw std::invalid_argument("val1 is negative");
      }
      vector<int> vectorList(val1, 0);
      int r = -1, c = sqrt(-1);
      if(val2 == 0) throw 0;
      r = (val1 / val2) * r;
      int ans = vectorList.at(val2);
      return r + val1 - val2 * ans;
   }
   static int getVal() {
      return value;
   }
};
int Solution::value = 0;

void solve(int t, long int values[][2]) {
   for (int i = 0; i < t; i++) {
      long long val1, val2;
      val1 = values[i][0];
      val2 = values[i][1];
      try {
         cout << Solution::foo(val1, val2) << '\n';
      }
      catch (const std::bad_alloc&) {
         cout << "Memory Low!\n";
      }
      catch (const std::exception& e) {
         cout << "Exception: " << e.what() << '\n';
      }
      catch (...) {
         cout << "Unhandled Exception\n";
      }
   }
}
int main() {
   long int arr[][2] = {{361643035132, 2297873642249}, {-17, 15}};
   solve(2, arr);
}

輸入

long int arr[][2] = {{361643035132, 2297873642249}, {-17, 15}};
solve(2, arr);

輸出

Memory Low!
Exception: val1 is negative

更新於: 2021年10月12日

255 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.