2011-12-29 80 views
1

我想malloc一些内存,对该内存运行一些操作,然后这些操作的结果是持久的。一个例子可能是如果我有一个2-d持久数组,我想要进行逐行更新。如何复制C中的指针?

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

什么是最安全的方式来做到这一点在C,而不必深复制临时持久化[行]的内容?如果我按照上面输入的方式执行而没有释放temp,是否会导致内存泄漏,即使我稍后再正确释放持久性内存?

编辑:我有一个相关的问题是:如果我试图释放(临时)在函数的末尾,我注意到,即使持久[行]维持在临时数据的引用,内存被释放。这是因为malloc/free的设计方式,所以每当一个指针被释放时就释放内存而不检查对该内存的其他活动引用?

+0

你为什么不随意改变持久性[行]? – 2011-12-29 04:44:17

+0

@Leafy当它进入函数时,在持久[行]中已经有数据,我需要将该初始数据和持久[行]的变种版本组合以形成最终的持久[行] – Jeff 2011-12-29 04:47:56

回答

2

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

1

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

0

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