假设我有以下设置:
struct matrix
{
int row, col;
};
struct matrix* createMatrix(int row, int col)
{
struct matrix* t_matrix;
t_matrix = (struct matrix*) malloc(sizeof(struct matrix));
t_matrix->row = row;
t_matrix->col = col;
return t_matrix;
}
然后我想要一个函数,暂时返回一个结构矩阵*,但不改变原始矩阵(非常重要):
struct matrix* transpose(struct matrix* mat)
{
return createMatrix(mat->col, mat->row);
}
我现在如何释放这个转置矩阵,但仍然临时使用它的值?
EDIT:删除了createMatrix 的不必要参数
解决:正如一些人所建议的,我最终制作了一个指向所有矩阵的指针,并在程序结束时释放它们。
通常,您在函数的文档中告诉它,它返回一个新的对象矩阵(即,它不会更改作为参数传递的任何矩阵),并且当它不再使用时,调用代码有责任释放它。
另一种可能性是将这些新创建的矩阵的列表存储在某个地方,并在根据某些标准,您知道它们不再使用时对其进行处理或重用;例如,通过使用标志、时间戳等。
需要记住的关键点是每个malloc
都需要有一个free
。下面是一些示例代码,说明了如何使用这些函数。
// Create a matrix
struct matrix* m1 = createMatrix(10, 15);
// Create a transpose of the matrix.
struct matrix* mt1 = transpose(m1)
// Create another transpose of the matrix.
struct matrix* mt2 = transpose(m1)
// Free the second transposed matrix
free(mt2);
// Free the first transposed matrix
free(mt1);
// Free the original matrix
free(m1);