我想要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的设计方式,所以无论何时调用指针上的空闲,都会释放内存而不检查对该内存的其他实时引用?答案 0 :(得分:2)
如果你没有正确释放persistent[row]
中的旧指针,如果它不是NULL,那只会导致内存泄漏。只要您在使用temp
覆盖之前释放旧指针,只要您正确(逐行)免费persistent
,就不会有任何问题。
答案 1 :(得分:1)
这不应该导致内存泄漏,因为如果你在释放持久性时正确释放所有行,那么临时指向上面代码块的内存部分也将被释放。
答案 2 :(得分:0)
它不会导致内存泄漏,因为free()将释放持久性指向的内存扇区,这与temp指向的内容相同。