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所指向内容的所有链接。
- 仅个人理解,如有错误还请指正。