说我有以下设置:
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);
}
我现在如何释放此转置矩阵,但仍暂时使用其值?
编辑:删除了createMatrix的不必要参数
解决:正如一些人建议的那样,我最终制作了一个指向我所有矩阵的指针,并在结束程序时释放它们。
答案 0 :(得分:1)
通常,你在函数的文档中告诉它返回一个新的对象矩阵(即,它不会改变作为参数传递的任何矩阵),并且它是调用代码的责任,当它是不再使用了。
另一种可能性是存储这些新创建的矩阵的列表,并按照某些标准处理或重用它们,您知道它们已不再使用;例如,使用标志,时间戳等
答案 1 :(得分:0)
要记住的关键点是每free
需要malloc
。这是一些示例代码,说明了如何使用这些函数。
// 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);