free函数探究

free函数:

今天再写二叉树时,对于释放节点时想到一个问题,free函数释放一个指向节点的指针后,究竟释放的是节点空间,还是有关节点的所有链接,还是仅仅是p指针与该节点的链接。

结构体定义:
typedef struct Tnode
{
    int data;
    struct Tnode *lchil,*rchil;
}Tnode,*Tree;
创建节点:
// 创建节点
void createNode(Tnode *node, int e){
    node->data = e;
    node->lchil = node->rchil = NULL;
}
主测试函数:
  • 因为简单的小测试就采用徒手建二叉树的方法了,代码较长。
void main(){   
    Tree T;
    T = (Tnode *)malloc(sizeof(Tnode));
    createNode(T,1);
   	// 创建节点
    Tnode n1;
    Tnode n2;
    Tnode n3;
    Tnode n4;
    Tnode n5;
    Tnode n6;
    createNode(&n1,2);
    createNode(&n2,3);
    createNode(&n3,4);
    createNode(&n4,5);
    createNode(&n5,6);
    createNode(&n6,7);
    // 构造二叉树
    T->lchil = &n1;
    T->rchil = &n2;
    n1.lchil = &n6;
    n1.rchil = &n4;
    n2.rchil = &n5;
    n5.lchil = &n3;
	
    // 进行测试
    Tnode *p = &n6;
    printf("p指向的地址%p\n",p);
    free(p);
    printf("n6的地址%p\n",&n6);
    printf("n1左孩子的地址%p\n",n1.lchil);
     
}
输出结果:

在这里插入图片描述

  • 由输出结果可以看到,再释放之前p的地址可以正常输出。
  • 但是free过后,所有能找到n6节点的链接全部都被断开,程序报错。所以可理解为free函数断开了p所指向内容的所有链接。
  • 仅个人理解,如有错误还请指正。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值