realloc二重指针
时间: 2024-10-30 11:06:26 浏览: 3
C语言指针详解.docx
`realloc`是C语言标准库中的函数,它主要用于动态内存调整。当需要改变已分配内存的大小时,可以使用这个函数。对于包含指向动态分配数组的二重指针的情况,`realloc`的使用如下:
假设有一个二维数组,它是通过初始指针`p`和长度`rows`、列数`cols`动态分配的,如 `int **arr = (int **)malloc(rows * sizeof(int *))`。如果你想要增加行数,比如添加一行,可以先对每个元素的指针进行调整,然后再调整整个数组的总大小。
```c
// 假设原有行数为rows,列数为cols
void resize(int **arr, int rows_new, int cols) {
// 如果新行数大于当前行数
if (rows_new > rows) {
// 首先释放旧的内存空间
free(arr);
// 再用realloc重新分配新的内存
arr = (int **)realloc(arr, rows_new * sizeof(int *));
if (arr == NULL) {
// 失败则返回NULL
perror("realloc");
return;
}
// 然后再次循环分配,为每一行分配列数的内存
for (int i = rows; i < rows_new; i++) {
arr[i] = (int *)malloc(cols * sizeof(int));
if (arr[i] == NULL) {
perror("malloc");
return;
}
}
}
// 如果只是修改了行数或列数,只需调整对应的值即可
else {
for (int i = rows; i < rows_new; i++) {
arr[i] = arr[rows - 1]; // 将最后一行复制到新增位置
}
}
}
```
阅读全文