两个指针指向同一内存的问题

看数据结构看到循环链表的合并,很奇怪为什么最后要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,那么就会造成内存泄露