c++ - 正确删除 3D 矩阵的指针

标签 c++ pointers matrix dynamic-memory-allocation

我编写了一个程序来创建 3D 矩阵(或多维矩阵),其中所有参数(行、列,全部都是变量)。我正在使用的矩阵类型如下所示:

3D Matrix

该程序正在按预期运行。但我不知道删除指针是否正确释放内存。我是否正确删除了指针?

#include <iostream>

using namespace std;

int main()
{
    int  vol;                   
    cout << "enter number of 2d arrays(vol value)" <<endl;
    cin >> vol;
    int row[10];
    cout<< "enter number of rows in each vol" << endl;
    for (int i = 0; i < vol ; i++)
    {
        cin >> row[i];
    }

    //================ Entering col for each rown in each vol  ================//
    int **col;
    col = new int *[vol];

    for (int i = 0; i < vol ; i++)
    {
        *(col+i) = new int [row[i]];
        for (int j = 0; j < row[i] ; j++)
        {
            cout<< "enter columns of " << j << "th row " <<" of vol " << i  <<" :  ";
            cin>>*(*(col+i)+j);
        }

    }

    //======= Printing the value of each col for each rown in each vol =======//
    cout<< "entered values are \n \n" << endl;

    for (int i = 0; i < vol; i++)
    {
        for (int j = 0; j < row[i]; j++)
        {
            cout<< *(*(col + i) + j);
            cout << "\t";
        }

        cout<< "\n" << endl;
    }

    //========================Creation of 3d matrix===========================//
    int ***p;

    p = new int **[vol];            //creating number of vol
    for (int i = 0; i < vol ; i++)  //creating rows for each vol
    {
        *(p + i) = new int *[row[i]];
    }

    for (int j = 0; j < vol ; j++)  //creating 1d array for each row
    {
        for (int k = 0; k < row[j] ; k++)
        {
            *(*(p + j) + k) = new int [*(*(col + j) + k)];
        }
    }

    //============Entering all the values in the 3d variable matrix===========//
    cout<< "entering elements into 3d matrix" << endl;
    cout << "enter all the values \n \n" << endl;
    for (int i = 0; i < vol ; i++)
    {
        for (int j = 0; j < row[i] ; j++)
        {
            for (int k = 0; k < *(*(col + i) + j) ; k++)
            {
                cout<< "enter the value in col " <<k <<", of row " << j<< ", of vol " << i << " : "<< endl;
                cin >> *(*(*(p + i) + j) + k);
            }
        }
    }

    //============Printing all the values in the 3d variable matrix===========//
    cout<< "Lets print all the values in 3d matrix \n\n" << endl;
    for (int i = 0; i < vol; i++)
    {
        for (int j = 0; j < row[i]; j++)
        {
            for (int k = 0; k < *(*(col + i) + j); k++)
            {
                cout<< *(*(*(p + i) + j) + k);
                cout << "\t";
            }

            cout<< " \n" << endl;
        }

        cout<< "\n\n============================" << endl;
    }

    //======================= deleting all pointers ========================//

    //Deleting the col pointer
    for (int i = 0; i < vol ; i++)
    {
        delete[] col[i];
    }

    delete[] col;

    //Deleting the p pointer
    for (int i = 0; i < vol ; i++)
    {
        for (int j = 0; j < row[vol] ; j++)
        {
            delete[] p[j];          //deleting the last arrays
        }
        delete[] p[i];
    }
    delete []p;

    system("pause");
    return 0;
}

最佳答案

你必须像尊重创建方式一样尊重删除方式,这样你才能做到:

//Deleting the p pointer
for ( int i = 0; i < vol ; i++){
    for (int j = 0; j < row[vol] ; j++)
        delete[] p[i][j];
    delete[] p[i];
}

delete[] p;

关于c++ - 正确删除 3D 矩阵的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49159092/

相关文章:

c++ - 在模板类中设置函数指针的问题

c - 为什么抓包时指针不指向正确的包头?

c - 指针的类型?

c++ - 如何使用 Eigen 库计算矩阵幂?

c++ - 将列 vector 从矩阵复制到opencv中另一个矩阵的每个列

c++ - 编程任务 : sum of submatrices

c++ - OpenCL:在 dll 中找不到 clRetainDevice

c++ - 更改 GLUT 调用以使用 MFC/C++

c++ - 转换为 token_def 的值类型

c++ - 在 C++ 中,为什么无法初始化指向函数的指针?