要解决上述问题,需要进行以下修改:

  1. 在定义二维数组arr之前,将其初始化为NULL,并在之后为其分配内存空间。修改的代码如下:
float** arr = NULL;
arr = new float*[a];
for (int i = 0; i < a; i++) {
    arr[i] = new float[b];
}

这样,就为二维数组arr的每一行分配了内存空间。

  1. 为了避免内存泄漏,在使用完二维数组arr后,需要手动释放内存。可以使用以下代码释放内存:
for (int i = 0; i < a; i++) {
    delete[] arr[i];
}
delete[] arr;

这将释放每一行的内存空间,然后释放行指针数组的内存。

综上所述,修改后的 storejz 函数应如下所示:

hls* storejz(int a, int b)
{
    hls* hls1;
    hls1 = new hls;
    float** arr = NULL;
    int i, j;
    arr = new float* [a];
    for (i = 0; i < a; i++)
    {
        arr[i] = new float[b];
    }
    cout << '请输入矩阵' << endl;
    for (i = 0; i < a; i++)
    {
        for (j = 0; j < b; j++)
        {
            cin >> arr[i][j];
        }
    }
    hls1->arr = arr;
    return hls1;
}

记得在适当的时候释放内存,以避免内存泄漏和错误。

C++ 二维数组内存分配及释放:避免内存泄漏

原文地址: https://www.cveoy.top/t/topic/oNc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录