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

看数据结构看到循环链表的合并,很奇怪为什么最后要free掉p,这样rearB->next不就会随机指向其他的内存了吗图片说明

4个回答

我记得与free配套使用的是malloc,与delete 配套使用的是new 才对的呀。难道你前面是用的malloc 来申请的内存空间?你要置空掉指针p,就是p = NULL;改变的就是这个指针p的地址而已,与链表的指针域是两码事,你如果想要通过指针来修改链表的话,就要用到*p来改变指针所指的内容,综上所述,在经过你的p = NULL;操作后,rearB->next 这块指针域的内容并没有改变。

qq_36767155
时下 结合上下文,我以为是指针。。
2 年多之前 回复
huahuahua__
林木森森森 嗯。。你觉得P是指针吗?还是其他的东西
2 年多之前 回复
qq_36767155
时下 你可以把题目给我看看吗
2 年多之前 回复
huahuahua__
林木森森森 我是后来加上的p1=NULL,下面的代码没有写
2 年多之前 回复
huahuahua__
林木森森森 像我下面写的,我在free掉p1之后,p1=NULL,然后再打印p2,结果p2还是指向另一块内存了
2 年多之前 回复
huahuahua__
林木森森森 回复huahuahua__: 打错
2 年多之前 回复
huahuahua__
林木森森森 像我下面写的,我在free掉票
2 年多之前 回复
huahuahua__
林木森森森 好像free掉之后不会默认等于NULL,要写多一句p=NULL;
2 年多之前 回复

p是一个存储空间,里边存放的是A表的头结点地址;
rearB->next = p;
已经将该地址即A表头结点地址赋值给B表尾结点rearB->next;
赋值结束后,free(p)不会造成rearB->next指向随机地址。

huahuahua__
林木森森森 回复huahuahua__: 因为书中前文也没有讲P是什么
2 年多之前 回复
huahuahua__
林木森森森 所以说p其实不是一个指针对吗?
2 年多之前 回复
 #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指向的内容也变了
图片说明

return_failed
return_failed 其实你在p2 =p1的时候把p1的地址已经赋值给p2了,你可以打印一下p1、p2的地址。
2 年多之前 回复

因为链表的node的内存都是new的,如果你不free,那么就会造成内存泄露

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!