c - 这个会漏吗?

标签 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 声明,我在 main 的末尾使用了 free()。

最佳答案

memcpy 不做内存分配,所以它本身不会造成内存泄漏1。您对 tmpMatrix 的分配是在自动存储中完成的(又名“在堆栈上”),因此它不会在您的方法中泄漏。

一般来说,在调用malloccallocreallocstrdup时要注意内存泄漏>,以及返回指向已动态分配的内存块的指针的函数。


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

关于c - 这个会漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18803704/

相关文章:

c - 当有人使用信号处理输入 "CTRL-C"时,在我的 shell 的历史缓冲区中输出最后 10 个命令

c - 如何向队列中添加元素

c - 标准库 `FILE` 类型

c - 想学c应该用什么软件

sql - 使用 PostgreSQL ECPG 插入数组

使用FFMPEG库时编译错误

c++ - C printf跨平台格式无警告

c - 在链表末尾添加数据的函数

在 OSX 下使用 termios 捕获 ESCAPE 键

c - WaitForSingleObject 是否用作内存屏障?