看数据结构看到循环链表的合并,很奇怪为什么最后要free掉p,这样rearB->next不就会随机指向其他的内存了吗
p是一个存储空间,里边存放的是A表的头结点地址;
rearB->next = p;
已经将该地址即A表头结点地址赋值给B表尾结点rearB->next;
赋值结束后,free(p)不会造成rearB->next指向随机地址。
我记得与free配套使用的是malloc,与delete 配套使用的是new 才对的呀。难道你前面是用的malloc 来申请的内存空间?你要置空掉指针p,就是p = NULL;改变的就是这个指针p的地址而已,与链表的指针域是两码事,你如果想要通过指针来修改链表的话,就要用到*p来改变指针所指的内容,综上所述,在经过你的p = NULL;操作后,rearB->next 这块指针域的内容并没有改变。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int *p1=NULL;
int *p2=NULL;
p1=(int *)malloc(4);
p2=p1;
*p1=10;
printf("p1:%d" ,*p1);
printf("p2:%d",*p2);
printf("\n");
free(p1);
printf("p1:%d",*p1);
printf("p2:%d",*p2);
可是我去试了一下,这里只free掉了p1,可是为什么最后连p2指向的内容也变了
因为链表的node的内存都是new的,如果你不free,那么就会造成内存泄露