在C中使用链接列表时控制内存

时间:2013-09-02 16:29:55

标签: c list memory memory-leaks linked-list

在处理链表(LL)时,让我们说我们正在编写一个函数insert(参数)来将新节点插入到d LL中。为此,我们在函数中编写类似于:

的函数
temp = (node *)malloc(sizeof(node)); 

这意味着我们正在为'temp'分配一些空间。从函数返回后,此临时变量会丢失其范围,并且其生命周期结束。所以它现在死了。但现在我怀疑是:

“即使从函数返回后,我们现在已经分配的内存完全在我们的控制中吗?”

我问的是我们对新分配的内存的控制。我们在打印或进行任何操作时都会得到结果;那记忆还在献给我们吗?如果环境(OS)想要使用该内存是受限制的还是它有权使用该内存?

3 个答案:

答案 0 :(得分:0)

如果您没有拨打free(),内存仍会分配给您使用。如果temp超出范围,你会泄露它 - 你怎么知道它在哪里使用?

答案 1 :(得分:0)

内存保持分配,直到它为free() d,即使你通过让它的所有指针都超出范围而忘记它。有人总是“负责”释放分配的内存;函数的文档应该告诉你他们是从你那里控制指针还是把它交给你(比如malloc()本身就是通过传回一个指针)。你可能在这里泄漏记忆。

答案 2 :(得分:0)

要明确: 分配的内存由您的程序分配。退出程序将清理它。在那之前它仅供您个人使用。

唯一的限制是你的OS拒绝分配这个内存。 (参见malloc手册)

同样失去对这个分配的内存的跟踪不会清除它,它只是无法访问(这称为泄漏,你释放了你的内存。但不要担心操作系统能够在退出时检索它)