加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C中的2D动态内存分配数组

发布时间:2020-12-16 03:37:03 所属栏目:百科 来源:网络整理
导读:几天前,我学会了如何从互联网创建2D分配的内存阵列,它完美无缺.要访问数组,我们只需使用matrix [i] [j],但是有没有什么方法可以通过使用*符号而不是[]来取消引用这个2D数组用于输入以及其他方法? 第一个问题解决了我可以使用*(*(矩阵i)j) 现在我又得到了另
几天前,我学会了如何从互联网创建2D分配的内存阵列,它完美无缺.要访问数组,我们只需使用matrix [i] [j],但是有没有什么方法可以通过使用*符号而不是[]来取消引用这个2D数组用于输入以及其他方法?

第一个问题解决了我可以使用*(*(矩阵i)j)

现在我又得到了另一个问题,最后的代码段是释放分配的内存(我也是从互联网上获得的),但我不明白,为什么我只能使用delete []矩阵?

int **matrix;

// dynamically allocate an array
matrix = new int *[row]; 
for (int count = 0; count < row; count++)
{
    matrix[count] = new int[col];
}

// input element for matrix
cout << endl << "Now enter the element for the matrix..."; 
for (int i=0; i < row; i++) 
{
    for (int j=0; j < col; j++)
    {
        cout << endl << "Row " << (i+1) << " Col " << (j+1) << " :";
        cin >> matrix[i][j]; // is there any equivalent declaration here?
    }
}

// free dynamically allocated memory
for( int i = 0 ; i < *row ; i++ )
{
    delete [] matrix[i] ;   
}
delete [] matrix ;

解决方法

由于[b]只是*(a b),你当然可以这样做:
*(*(matrix + i) + j)

无论如何,这些新的分配容易出错.如果其中一个嵌套的新闻抛出,那么你就会有泄漏.尝试使用std :: vector代替.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读