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 声明,我在 main 的末尾使用了 free()。
最佳答案
memcpy
不做内存分配,所以它本身不会造成内存泄漏1。您对 tmpMatrix
的分配是在自动存储中完成的(又名“在堆栈上”),因此它不会在您的方法中泄漏。
一般来说,在调用malloc
、calloc
、realloc
、strdup
时要注意内存泄漏>,以及返回指向已动态分配的内存块的指针的函数。
1 将数据复制到指针的内存块中可能会泄漏这些指针指向的 block ,但不会泄漏您传递给
memcpy
的参数。
关于c - 这个会漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18803704/