首页 > 文章列表 > C++程序示例,展示异常处理

C++程序示例,展示异常处理

异常处理 示例 C程序
284 2023-09-09

假设有一个函数用于计算一些复杂的数学运算。但在运算过程中,可能会发生一些异常。我们必须处理可能发生的不同类型的异常,并执行以下操作。

  • 如果计算机无法为计算分配内存,我们必须打印“内存不足!”
  • 如果发生任何其他与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 Exceptionn";
      }
   }
}
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