在处理链表(LL)时,让我们说我们正在编写一个函数insert(参数)来将新节点插入到d LL中。为此,我们在函数中编写类似于:
的函数temp = (node *)malloc(sizeof(node));
这意味着我们正在为'temp'分配一些空间。从函数返回后,此临时变量会丢失其范围,并且其生命周期结束。所以它现在死了。但现在我怀疑是:
“即使从函数返回后,我们现在已经分配的内存完全在我们的控制中吗?”
我问的是我们对新分配的内存的控制。我们在打印或进行任何操作时都会得到结果;那记忆还在献给我们吗?如果环境(OS)想要使用该内存是受限制的还是它有权使用该内存?
答案 0 :(得分:0)
如果您没有拨打free()
,内存仍会分配给您使用。如果temp
超出范围,你会泄露它 - 你怎么知道它在哪里使用?
答案 1 :(得分:0)
内存保持分配,直到它为free()
d,即使你通过让它的所有指针都超出范围而忘记它。有人总是“负责”释放分配的内存;函数的文档应该告诉你他们是从你那里控制指针还是把它交给你(比如malloc()
本身就是通过传回一个指针)。你可能在这里泄漏记忆。
答案 2 :(得分:0)
要明确: 分配的内存由您的程序分配。退出程序将清理它。在那之前它仅供您个人使用。
唯一的限制是你的OS拒绝分配这个内存。 (参见malloc手册)
同样失去对这个分配的内存的跟踪不会清除它,它只是无法访问(这称为泄漏,你释放了你的内存。但不要担心操作系统能够在退出时检索它)