// 编写一个C++ 程序，动态分配一个整型数组，并根据用户输入的索引值访问数组元素。 在访问数组元素时处理以下异常情况： 1）如果数组分配内存失败，则抛出一个自定义的异常对象 MemoryAllocationException。 2）如果用户输入的索引超出了数组的范围，则抛出一个自定义的异常对象 IndexOutOfBoundsException。
// 【要求】在 main 函数中调用动态内存分配函数，并捕获并处理可能抛出的异常。
#include <bits/stdc++.h>

using namespace std;

// 自定义异常类
class MemoryAllocationException : public exception
{
public:
    const char *what() const throw()
    {
        return "内存分配异常";
    }
};

class IndexOutOfBoundsException : public exception
{
public:
    const char *what() const throw()
    {
        return "索引越界异常";
    }
};

int main()
{
    int *arr = new int[10]; // 动态分配一个整型数组
    try
    {
        if (arr == NULL)
            throw MemoryAllocationException();

        // 当不抛出异常时，继续执行数组的赋值操作
        arr[0] = 1;
        arr[1] = 2;
        arr[2] = 3;
        arr[3] = 4; // 其余元素会被初始化为 0

        int n;
        cout << "请输入索引值: ";
        cin >> n;
        if (n < 0 || n > 9)
            throw IndexOutOfBoundsException();
        // 当不抛出异常时，继续执行数组的访问操作
        cout << "arr[" << n << "] = " << arr[n] << endl;
    }
    catch (exception &e)
    {
        cout << "捕获异常: " << e.what() << endl;
    }

    return 0;
}
