sách gpt4 ai đã đi

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

In lại 作者:太空宇宙 更新时间:2023-11-04 06:27:52 25 4
mua khóa gpt4 Nike

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

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

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

-Attempt A xe đạpĐƯỢC RỒI

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

- 尝试 B xe đạp

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

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

1 Câu trả lời

你需要一个free()对于每个 malloc() *。有m+1Gọi malloc() ;你最好做m+1Gọi free()Cũng vậy.

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

Được cho:

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

Phải free_mem_mat() 的正确调用是:

free_mem_mat(MAT_ROWS, matrix);

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

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

25 4 0
太空宇宙
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com