在C中释放返回的变量

时间:2014-10-01 02:37:12

标签: c return malloc

说我有以下设置:

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的不必要参数

解决:正如一些人建议的那样,我最终制作了一个指向我所有矩阵的指针,并在结束程序时释放它们。

2 个答案:

答案 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);