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()。
答案 0 :(得分:3)
memcpy
不进行内存分配,因此它本身不会导致内存泄漏 1 。您在tmpMatrix
的分配是在自动存储(堆栈中的AKA)中完成的,因此它不会泄露给您的方法。
通常,当您调用malloc
,calloc
,realloc
,strdup
以及返回指向内存块的指针的函数时,应注意内存泄漏已动态分配。
<小时/> 1 将数据复制到指针的内存块中可能会泄漏这些指针所指向的块,但不会泄漏传递给
memcpy
的参数。
答案 1 :(得分:1)
memcpy
不会分配内存(在目的地永久性意义上),因此memcpy
代码不会泄漏内存。