我一直对c语言使用free函数之后,指针所指向的内容有什么变化比较迷惑,所以写了个程序,看看到底是什么的结果。
#include <stdio.h>
#include <malloc.h>
typedef struct node
{
int data;
struct node *next;
}node, *nodePtr;
void main()
{
nodePtr p = (nodePtr)malloc(sizeof(node));
nodePtr r = (nodePtr)malloc(sizeof(node));
p->data = 5;
r->data = 6;
printf("p: %d\n", p);
printf("p->data: %d\n", p->data);
printf("r: %d\n", r);
printf("r->data: %d\n", r->data);
p->next = r;
printf("p': %d\n", p);
printf("p'->data: %d\n", p->data);
printf("p'->next: %d\n", p->next);
printf("p'->next->data: %d\n", p->next->data);
printf("r': %d\n", r);
printf("r'->data: %d\n", r->data);
free(p);
printf("p'': %d\n", p);
printf("p''->data: %d\n", p->data);
printf("p''->next: %d\n", p->next);
printf("p''->next->data: %d\n", p->next->data);
printf("r'': %d\n", r);
printf("r''->data: %d\n", r->data);
}
从运行结果可以看出,free(p);之后,p的地址不变,还是分配以前的地址,但是p所指向的结构体里面的p->data和p->next已经不存在了。