您好,我一直在寻找一种动态构建数组的方法,看来方法是:
int main(){
int **mat;
int filas = 2, columnas = 3; /*Supongamos esos valores*/
mat = (int **)malloc(filas * sizeof(int *));
for(i = 0; i < columnas; i++)
mat[i] = (int *)malloc(columnas * sizeof(int));
但是,我找不到如何释放分配给数组的内存。是刚刚完成free(mat)
还是必须free(mat[i])
为每一行及之后完成free(mat)
?
您必须使用
free()
来释放您创建的每个元素的内存malloc
。那将是循环内部的mat
不同。mat[i]
但真正重要的是你做这件事的顺序。如果它们是
malloc
独立的,则可以不free
考虑顺序;但是在数组代码中,您有一个malloc
为“指针列表”()保留空间,指向也用( )mat
保留的其他内存区域。它们之间存在依赖关系。如果您要创建一个前导指针 ( ),那么您使用的其他保留将成为孤立的,无法访问或释放它们。这就是为什么在这种情况下,您应该按照分配内存的相反顺序释放内存:首先是循环内部,最后是。malloc
mat[i]
free
mat
malloc
mat[i]
mat
像这样的东西: