C++ 程序演示异常处理
c++server side programmingprogramming
假设有一个函数计算一些非常复杂的数学运算。但在运算过程中,可能会发生一些异常。我们必须处理可能发生的不同类型的异常并执行以下操作。
- 如果计算机无法分配用于计算的内存,我们必须打印"内存不足!"
- 如果发生任何其他与 C++ 相关的异常,我们必须打印"异常:",然后打印异常。
- 如果发生其他情况,我们打印"未处理的异常"。
我们得到一个包含一对值的数组,并将其传递给函数。如果发生任何异常,我们会处理它,否则,我们会打印输出值。
我们只需处理异常,而不管产生异常的函数的机制。
因此,如果输入类似于 arr = {{361643035132, 2297873642249}, {-17, 15}};,则输出将为 −
Memory Low! 异常:val1 为负数
第一对值太大而无法处理,因此打印"Memory low"。第二对的第一个值为负数。提供的函数无法处理这种情况,因此它会生成/抛出异常"val1 为负",
为了解决这个问题,我们将遵循以下步骤 −
- 初始化 i := 0,当 i < t,更新(将 i 增加 1),执行 −
- val1 := values[i, 0]
- val2 := values[i, 1]
- 尝试,
- print(foo(val1, val2))
- 如果无法分配内存(捕获到 bad_alloc 异常),则
- print("Memory Low!")
- 否则,如果捕获到任何其他标准 C++ 异常 e,则
- print("Exception: ")
- 打印异常的详细信息
- 否则,如果捕获到任何其他异常,则
- print("Unhandled Exception")
示例
让我们看看下面的实现以便更好地理解 −
#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