释放返回了C中的变量



假设我有以下设置:

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

相关内容

  • 没有找到相关文章

最新更新