C++初学者,关于动态内存分配的问题

img

img


我是刚接触C++,碰到动态内存分配的一个题,第一个是要求,第二个是我自己写了一半写不下去的,麻烦看一下,能给个完整代码,要是能有详细一点的注释就太感谢了

需要二维动态数组解决,用户交互自己做吧。

#include <iostream>

int main()
{
    int cntClass = 0; //班级数量

    std::cin >> cntClass;

    if (cntClass <= 0) //班级数量小于零,退出
    {
        return 0;
    }

    int **scoresPtr = new int *[cntClass](); //建立二维数组用于存放成绩
    int *peopleCnt = new int[cntClass]();    //建立数组,存放每个班级人数

    for (int cnt = 0; cnt != cntClass; ++cnt)
    {
        int peopleNum = 0; //初始化班级人数
        std::cin >> peopleNum;
        if (peopleNum <= 0) //人数少于0,清理内存,退出
        {
            for (int cnt = 0; cnt != cntClass; ++cnt)
            {
                delete[] scoresPtr[cnt];
            }
            delete[] scoresPtr;
            delete[] peopleCnt;
            return 0;
        }
        peopleCnt[cnt] = peopleNum;          //设定某班的人数
        scoresPtr[cnt] = new int[peopleNum]; //初始化某班的成绩数组
        for (int i = 0; i != peopleNum; ++i)
        {
            std::cin >> scoresPtr[cnt][i];
        }
    }

    int x = 0;
    int y = 0;
    std::cin >> x >> y;
    //若输入的x,y不在合理区间,退出
    if ((x >= 0 && x < cntClass) && (y >= 0 && y < peopleCnt[x]))
    {
        std::cout << scoresPtr[x][y] << std::endl;
    }

    //清理内存
    for (int cnt = 0; cnt != cntClass; ++cnt)
    {
        delete[] scoresPtr[cnt];
    }
    delete[] scoresPtr;
    delete[] peopleCnt;

    return 0;
}