Muk*_*und 3 c free linked-list singly-linked-list
我们为什么需要free()?像NULL类似的工作一样放置头节点,不是吗?
为什么我们需要free()?
该函数free用于释放动态分配的内存。
将头节点设置为 NULL 也能完成类似的工作,不是吗?
在指向头节点的指针中放置 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;
}
Run Code Online (Sandbox Code Playgroud)
它的输出是
*p1 = 10
*p2 = 10
Run Code Online (Sandbox Code Playgroud)
在程序中,为该类型的对象动态分配了内存int,并将分配的内存地址分配给指针p1。
分配NULL给指针p1后,分配的内存地址不再存储在该指针中。
因此,如果地址没有分配给第二个指针,p2那么分配的内存地址将永远丢失,我们无法释放内存。
只有在指针中有地址的副本,p2我们才能释放分配的内存。
因此,将指针设置为NULL仅更改存储在指针中的值。分配的内存不会以任何方式触及。