0

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

temp = (node *)malloc(sizeof(node)); 

这意味着我们正在为“temp”分配一些空间。从函数返回后,这个临时变量失去了它的作用域,它的生命周期也结束了。所以它现在死了。但现在我的疑问是:

“即使从函数返回后,我们现在分配的内存是否完全在我们的控制之下?”

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

4

3 回答 3

0

如果您没有调用free(),内存仍然分配给您使用。如果temp超出范围,您虽然泄漏了它 - 您将如何找出它在哪里使用它?

于 2013-09-02T16:32:01.960 回答
0

free()即使您通过让所有指向它的指针超出范围而失去对它的跟踪,内存也会一直分配到它为d。总是有人“负责”释放分配的内存;函数的文档应该告诉你它们是从你那里控制一个指针还是把它交给你(比如它malloc()自己通过传回一个指针来实现)。您可能在这里泄漏内存。

于 2013-09-02T16:32:15.367 回答
0

要清楚:分配的内存是由您的程序分配的。退出您的程序将清除它。在此之前,它仅供您个人使用。

唯一的限制是如果您的操作系统拒绝分配此内存。(见malloc手册)

同样丢失分配的内存并不能清除它,它只是无法访问(这称为泄漏,您丢失了内存。但不要担心操作系统将能够在退出时检索它)

于 2013-09-02T16:32:53.180 回答