这会泄漏吗?

时间:2013-09-14 16:12:45

标签: c

calculate2基本上是基于邻居进行矩阵计算。我有一段时间没有写过C,我想知道每次迭代的memcpy是否会成为内存问题,或者我是否应该在每次k迭代之后释放tmpMatrix,然后再进行新的memcpy?

void transform2(int *pMatrix, int iteration)
{
if(iteration == 0)
    return;

int fullLength = MATRIX_DIM * MATRIX_DIM;
int tmpMatrix[fullLength];
int start;
int row;
int col;

for(start = 0; start < iteration ; start++)
{
    memcpy(tmpMatrix, pMatrix, sizeof(pMatrix[0]) * (fullLength));

    for(row = 0; row < MATRIX_DIM ; row++)
    {
        for(col = 0; col < MATRIX_DIM ; col++)
        {
            int res = calculate2(pMatrix, tmpMatrix, row, col , iteration);
            set_at(pMatrix, res, row, col);
        }
    }
}
}

另外,如果你们认为有一种更清洁的方法可以解决这个问题,我愿意接受建议。本质上,tmpMatrix是迭代-1的前一个矩阵。

P.S pMatrix是一个全局的int * _Matrix声明,我在我的主要结尾使用free()。​​

2 个答案:

答案 0 :(得分:3)

memcpy不进行内存分配,因此它本身不会导致内存泄漏 1 。您在tmpMatrix的分配是在自动存储(堆栈中的AKA)中完成的,因此它不会泄露给您的方法。

通常,当您调用malloccallocreallocstrdup以及返回指向内存块的指针的函数时,应注意内存泄漏已动态分配。

<小时/> 1 将数据复制到指针的内存块中可能会泄漏这些指针所指向的块,但不会泄漏传递给memcpy的参数。

答案 1 :(得分:1)

memcpy不会分配内存(在目的地永久性意义上),因此memcpy代码不会泄漏内存。

但是,我没有检查你的代码。