如何在C中复制指针?

时间:2011-12-29 04:40:30

标签: c malloc

我想要malloc一些内存,在该内存上运行一些操作,然后让这些操作的结果持久化。一个例子可能是我有一个2维持久化数组,我想在行上进行行更新。

void update(int **persistent, int row, int rowSize) 
{
    int *temp = (int*) malloc(sizeof(int) * rowSize);
    //...do stuff with temp
    persistent[row] = temp
}

在C中执行此操作的最安全的方法是什么,而不必将temp的内容深度复制到持久的[row]?如果我按照上面输入的方式执行它而不释放临时值,即使我以后正确地释放持久性,也会导致内存泄漏?

编辑:我遇到的一个相关问题是:如果我尝试在函数结束时释放(temp),我注意到即使持久[row]在temp处维护对数据的引用,内存也会被释放。这是因为malloc / free的设计方式,所以无论何时调用指针上的空闲,都会释放内存而不检查对该内存的其他实时引用?

3 个答案:

答案 0 :(得分:2)

如果你没有正确释放persistent[row]中的旧指针,如果它不是NULL,那只会导致内存泄漏。只要您在使用temp覆盖之前释放旧指针,只要您正确(逐行)免费persistent,就不会有任何问题。

答案 1 :(得分:1)

这不应该导致内存泄漏,因为如果你在释放持久性时正确释放所有行,那么临时指向上面代码块的内存部分也将被释放。

答案 2 :(得分:0)

它不会导致内存泄漏,因为free()将释放持久性指向的内存扇区,这与temp指向的内容相同。