gpt4 book ai didi

如果我想销毁链表并释放内存,我不能直接输入 head=NULL 吗?

转载 作者:行者123 更新时间:2023-12-03 23:33:59 25 4
gpt4 key购买 nike

为什么我们需要free()?将头节点设置为 NULL 也有类似的作用,不是吗?

最佳答案

Why do we need free()?

函数free用于释放动态分配的内存。

Putting the head node as NULL does similar work, doesn't it?

将 NULL 放在指向头节点的指针中不会释放列表中所有动态分配的内存,既不用于头节点,也不用于其他节点。这会导致丢失第一个动态分配的节点的地址,结果您将获得大量内存泄漏,因为内存变得不可访问(但未释放)..

考虑以下演示程序。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int *p1 = malloc( sizeof( int ) );

*p1 = 10;

printf( "*p1 = %d\n", *p1 );

int *p2 = p1;

p1 = NULL;

printf( "*p2 = %d\n", *p2 );

free( p2 );

return 0;
}

它的输出是

*p1 = 10
*p2 = 10

在程序中为 int 类型的对象动态分配了内存,分配的内存地址被分配给指针 p1

NULL赋值给指针p1后,分配的内存地址就不再存储在这个指针中了。

因此,如果地址没有分配给第二个指针p2,那么分配的内存地址将永远丢失,我们无法释放内存。

只有在指针 p2 中有地址的副本,我们才能释放分配的内存。

因此将指针设置为 NULL 只会更改存储在指针中的值。分配的内存不会以任何方式被触及。

关于如果我想销毁链表并释放内存,我不能直接输入 head=NULL 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63845131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com