1

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 的前一个矩阵。

PS pMatrix 是一个全局 int *_Matrix 声明,我在 main 的末尾使用 free() 来声明它。

4

2 回答 2

3

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

malloc通常,当您调用、callocreallocstrdup和返回指向已动态分配的内存块的指针的函数时,您应该注意内存泄漏。


1将数据复制到指针的内存块中可能会泄漏这些指针指向的块,但不会泄漏您传递给的参数memcpy

于 2013-09-14T16:17:33.307 回答
1

memcpy不分配内存(在永久的意义上,在目的地),所以你的代码不会因为memcpy.

不过,我还没有检查过你的代码。

于 2013-09-14T16:15:42.687 回答