鱼C论坛

 找回密码
 立即注册
查看: 918|回复: 2

[已解决]malloc和free函数

[复制链接]
发表于 2020-3-20 13:39:57 | 显示全部楼层 |阅读模式
3鱼币
最近学到内存分配,使用malloc创建内存空间后再用free释放,
可是为什么我释放之后还能正常访问那个指针的内容
int *p;
            p=(int *)malloc(sizeof(int));
                    if(p==NULL)
                    {
                        printf("分配内存失败了");
                        exit(1);
                    }
            printf("请输入一个整数:");
            scanf("%d",p);
            printf("%d\n",*p);
            free(p);
            printf("%d\n",*p);
然后输入520,输出520\n520\n
能不能讲讲free函数的详细原理!谢谢了!
最佳答案
2020-3-20 13:39:58
      free(p)之后并不表示p指向的那个地址的内容被清空了,它填充的还是你原来存放的内容,free只是表示这个区域可以被别的程序或者本程序下次申请空间时可以申请到这个地址。
      下次你别的程序或者这个程序再次申请空间时,如果申请的还是这个空间,这时你再填写数据,这时这个地址填写的内容才会被修改,不然这个地址保存的内容会一直是520。而你的指针p指向该地址,所以你再次输出得到的还是520。因此在释放完空间后,最好把指向该空间的指针置为NULL,即p = NULL;

最佳答案

查看完整内容

free(p)之后并不表示p指向的那个地址的内容被清空了,它填充的还是你原来存放的内容,free只是表示这个区域可以被别的程序或者本程序下次申请空间时可以申请到这个地址。 下次你别的程序或者这个程序再次申请空间时,如果申请的还是这个空间,这时你再填写数据,这时这个地址填写的内容才会被修改,不然这个地址保存的内容会一直是520。而你的指针p指向该地址,所以你再次输出得到的还是520。因此在释放完空间后,最 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-20 13:39:58 | 显示全部楼层    本楼为最佳答案   
      free(p)之后并不表示p指向的那个地址的内容被清空了,它填充的还是你原来存放的内容,free只是表示这个区域可以被别的程序或者本程序下次申请空间时可以申请到这个地址。
      下次你别的程序或者这个程序再次申请空间时,如果申请的还是这个空间,这时你再填写数据,这时这个地址填写的内容才会被修改,不然这个地址保存的内容会一直是520。而你的指针p指向该地址,所以你再次输出得到的还是520。因此在释放完空间后,最好把指向该空间的指针置为NULL,即p = NULL;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-20 15:42:38 | 显示全部楼层
梦想灬远帆 发表于 2020-3-20 13:39
free(p)之后并不表示p指向的那个地址的内容被清空了,它填充的还是你原来存放的内容,free只是表示这 ...

谢谢老哥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 21:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表