【发布时间】:2021-12-11 22:59:25
【问题描述】:
我正在用 C 语言编写程序,并在函数中使用了 malloc()。我必须在函数中使用 free() 吗?如果我不释放它,它只是一个函数,它会导致内存泄漏吗?
谢谢。
void insertFirst(int key, int data) {
//create a link
struct node *link = (struct node*) malloc(sizeof(struct node));
link->key = key;
link->data = data;
//point it to old first node
link->next = head;
//point first to new first node
head = link;
}
【问题讨论】:
-
您已将其添加到链接列表中,因此您不应释放它。以后从链表中删除它的人应该根据需要释放它。
-
当你不再需要它时,你需要释放它。即删除节点时,或者清理整个列表时。
-
@jarmod 除非后来从列表中删除它的人保留引用并继续使用它
-
@gkhaos 因此“根据需要”,但是是的。
-
通常会发生内存泄漏,当您分配一些内存并丢失指向它的指针,因此无法再释放它。如果您仍在跟踪它(即它在您的链表中),则不会“泄漏”任何内存。
标签: c struct linked-list dynamic-memory-allocation singly-linked-list