gpt4 book ai didi

自由 m*n 矩阵二维分配的正确方法

转载 作者:太空宇宙 更新时间:2023-11-04 06:27:52 25 4
gpt4 key购买 nike

我以这种方式分配了一个非方阵,但我不确定我是否正确使用了释放

float **matrix_alloc(int m /* rows */, int n /* columns */)
{
int i;
float **arr = malloc(m*sizeof(*arr));
for(i=0; i<m; i++)
{
arr[i]=malloc(n*sizeof(**arr));
}
return arr;
}

我试过两种释放内存的方法

-Attempt A 循环

void free_mem_mat(int m, float **array) {
int i;
for (i = 0; i < m; i++) {
free(array[i]);
}
free(array);
}

- 尝试 B 循环

void free_mem_mat(int n, float **array) {
int i;
for (i = 0; i < n; i++) {
free(array[i]);
}
free(array);
}

我应该用什么来免费?行上的A 方式还是B 方式? (我知道所写的方法是相同的,我已将其重写为尽可能清楚)

最佳答案

你需要一个free()对于每个 malloc() *。有m+1调用 malloc() ;你最好做m+1调用 free()也是。

鉴于此作为起点,选项 A 是正确的解决方案。但是,也可以公平地注意到,只要您传递 m,这两个函数(选项 A 和选项 B)就严格等效。分配函数的维数作为释放函数的大小参数。选项 B 中的评论具有误导性;你没有遍历列。

给定:

enum { MAT_ROWS = 20, MAT_COLS = 30 };
float **matrix = matrix_alloc(MAT_ROWS, MAT_COLS);

free_mem_mat() 的正确调用是:

free_mem_mat(MAT_ROWS, matrix);

* 如果您使用 realloc(),这是一个过度简化的声明或 calloc() .你需要一个free()对于每个 malloc()那不是realloc() 'd,还有一个 free()对于每个 realloc()没有做 free() — 通过将大小设置为 0。对待 calloc()相当于malloc()至于free()很关心。

关于自由 m*n 矩阵二维分配的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24195654/

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