【发布时间】:2022-01-08 00:21:08
【问题描述】:
我正在使用 C 中的矩阵并希望改进我的代码并确保没有内存泄漏。
我的矩阵实现如下:
typedef struct {
int nb_cols;
int nb_rows;
float *data;
} matrix;
我有很多函数需要两个矩阵作为输入,然后返回一个输出。它们看起来像这样:
matrix *function(matrix* m1, matrix *m2)
{
matrix* temp = matrix_init(m1->rows, m1->cols);
// Doing some stuff
// like temp[i * (m1->cols) + j] = m1[ i * (m1->cols + j] + m2[i * (m2->cols + j];
// (this is just an example)
return temp;
}
当我这样调用这些函数时:
mat = function1(function2(m1, m2), m3);
编译器是否自动允许临时矩阵然后释放?还是我不应该这样做,并且拥有所有临时矩阵来一一免费地进行操作?
这样写更好吗?:
mat_temp = function2(m1, m2);
mat = function1(mat_temp, m3);
free(mat_temp);
非常感谢您的回答!
【问题讨论】:
-
您的建议更好,因为 malloc() 不知道它们的使用将是多么“临时”
-
"free functions applied to functions" 应该是从嵌套函数中释放输出。释放函数意味着释放与函数关联的代码段,这可能不是您的意思。