二维数组动态分配内存
时间: 2023-09-26 22:10:43 浏览: 123
为了动态分配二维数组的内存,有几种方法可以使用。一种方法是通过分配一块存放m个int *类型元素的内存,再分配一块存储m * n个元素数据的内存空间来实现,然后将首地址返回给** arr作为二维数组的索引。具体的实现代码如下所示:
int** ArrMalloc2d(int ***arr, const int m, const int n) {
*arr = (int **)malloc(m * sizeof(int *));
if(! *arr) {
return ERROR;
}
**arr = (int *)malloc(m * n * sizeof(int));
if(! **arr) {
return ERROR;
}
for (int i = 1; i < m; i++) {
*(*arr + i) = *(*arr + i - 1) + n;
if(! *(*arr + i)) {
return ERROR;
}
}
return *arr;
}
这段代码会分配一维数组来存储指向二维数组每一行首元素的指针,然后分配一块连续的内存来存储二维数组的元素。通过这种方式,我们可以按照arr[i][j的方式访问二维数组的元素。为了释放内存,我们可以使用下面的代码:
Status ArrFree2d(int ***arr, const int m) {
free(*(*arr + 0));
*(*arr + 0) = NULL;
if(*(*arr + 0)) {
return ERROR;
}
free(*arr);
*arr = NULL;
if(*arr) {
return ERROR;
}
return OK;
}
这样就能动态地分配和释放二维数组的内存了。但需要注意的是,使用这种方式分配的二维数组,在进行整块内存操作时会遇到问题,例如对所有元素清零。因为使用memset进行清零操作会清除连续的m * n个内存单元,而实际的*(arr + i)并不是连续的。因此,在对整块内存进行操作时需要注意。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [二维数组及其动态内存分配](https://blog.csdn.net/weixin_43955214/article/details/104126662)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文