gpt4 book ai didi

c - 我将如何释放这些 mallocs?

转载 作者:太空狗 更新时间:2023-10-29 15:25:51 25 4
gpt4 key购买 nike

我有这个函数来为矩阵分配内存:

double **mmalloc(int r, int c){
double **matrix = (double **)malloc((r)*sizeof(double*));
for (int y = 0; y < r; y++){
matrix[y] = (double *)malloc(c*sizeof(double));
}

for (int y = 0; y < r; y++){
for(int x = 0; x < c; x++){
matrix[y][x] = 0;
}
}
return matrix;
}

如何释放返回矩阵的所有内存?我有这个函数来释放矩阵...我可以释放矩阵的行但我不能释放列。

这是释放函数:

// Free all memory allocated for A 
void mfree(int r, int c, double **A){
for (int y = 0; y < r; y++){
free(A[y]);
}
}

最佳答案

您需要一一释放所有行,然后是最初分配的列(包含所有行)

void xfree(int r, int c, double **A){
for (int y = 0; y < r; y++){
free(A[y]);
}
free (A);
}

按此顺序。

double ** (Initial allocation)

(double *)row0 → col0 col1 ...
(double *)row1 → col0 col1 ...
...

其中每个i 由(双)列组成。

为了完全释放一个动态分配的数组数组,记住这些规则

  • free的数量必须等于用于分配数组及其数组的malloc的数量

  • 考虑如果某些东西是免费的它就不再可用,即使它可能偶然工作(这种行为之后的行为称为未定义行为)。例如,如果您首先 free(A),则您不应该 free(A[i]) 因为 A - 一个内存空间包含指针列表 - 不应再分配/使用。

  • 因此首先释放最里面的元素(“包含”,例如A[i])然后释放“容器” (例如A)。

关于c - 我将如何释放这些 mallocs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40253243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com