繁体   English   中英

C:重新分配由Malloc创建的二维数组

[英]C: Realloc twodimensional array created by Malloc

我有一个分配的二维int数组,如下所示:

int **matrix = (int**)malloc(x * sizeof(int));
for (i = 0; i < x; i++)
    matrix[i] = (int*)malloc(y * sizeof(int));

如果我确实通过以下代码重新realloc此数组

int **matrix = (int**)realloc(matrix, x * sizeof(int));
for (i = 0; i < x; i++)
    matrix[i] = (int*)malloc((y) * sizeof(int));

数组的第二维是否还会有剩余的“尾巴”,我是否应该在重新分配之前为它们使用free()函数,否则它们将自行消失?

您将完全丢失matrix数据,因此这实际上并不是在重新realloc任何内容。 您还可以freemalloc顶级数组,从而获得更好的性能。 此外,您的代码还会泄漏内存,因为第二级分配不是free d。

这是在保持当前值不变的情况下如何调整2D矩阵的大小,将新分配的单元格初始化为0并释放任何多余的剩余物的方法:

// matrix was allocated to x and y
// reallocate it to newx, newy
for (i = newx; i < x; i++) { /* free unneeded rows */
    free(matrix[i]);
}
matrix = realloc(matrix, sizeof(*matrix) * newx);
for (i = x; i < newx; i++) { /* initialize the new row pointers */
    matrix[i] = NULL;
}
for (i = 0; i < newx; i++) {
    matrix[i] = realloc(matrix[i], sizeof(*matrix[i]) * newy);
    for (int j = y; j < newy; j++)
        matrix[i][j] = 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM