我发现一个函数可以删除链表的头节点并将头移动到下一个节点。如果只需移动 head 即可得到相同的结果,那么将 head 分配给 p,并在移动 head 后取消分配它有什么用呢?
我刚刚使用了 printf("%d", head->data) 和 head = head->next,并得到了相同的结果。我浪费内存了吗?
// Why should I use this :
void deleteFromFront() {
node p = head;
printf("\n\tThe deleted element is : %d\n", head->data);
head = head->next;
free(p);
}
// And not this :
void deleteFromFront() {
printf("\n\tThe deleted element is : %d\n", head->data);
head = head->next;
}
最佳答案
此版本:
node p = head;
printf("\n\tThe deleted element is : %d\n", head->data);
head = head->next;
free(p);
释放旧的头节点,这个版本:
printf("\n\tThe deleted element is : %d\n", head->data);
head = head->next;
没有。如果您想释放旧的头节点,则必须使用第一个版本。如果您释放
一 block 内存,则可以在下次调用malloc
时重用它。如果您在使用完内存后没有释放
内存,您的程序将使用越来越多的内存,因为系统仍然认为您的程序正在使用它。这称为内存泄漏。
关于c - 将 head 分配给指针 'p' 并在删除 head 后取消分配 'p' 有何意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57162939/