鱼C论坛

 找回密码
 立即注册
查看: 1651|回复: 8

[已解决]free()函数释放ptr参数所指向的内存空间到底是什么意思

[复制链接]
发表于 2017-11-5 18:02:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
其他的代码就省略了,

  1. int* ptr = (int *)malloc(sizeof(int));

  2. *ptr = 110;

  3. free(ptr);
复制代码

free之后,ptr指针还会存在吗? 整数110还在吗? ptr所指的空间会怎么样?
谢谢回答!
最佳答案
2017-11-5 20:00:46
ptr在,数据110应该是不在了,ptr指向的地址仍不变。
可以写个代码试试,ptr指向一直是不变的,但是因为free释放了地址所存储的空间,数据也就被释放。
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main()
  4. {
  5.         int *ptr;
  6.        
  7.         ptr = (int *)malloc(sizeof(int));

  8.         *ptr = 110;
  9.         printf("释放前:\n *ptr = %d\tptr = %p\n", *ptr, ptr);

  10.         free(ptr);
  11.         printf("释放后:\n *ptr = %d\tptr = %p\n", *ptr, ptr);

  12.         *ptr = 220;
  13.         printf("重新赋值:\n *ptr = %d\tptr = %p\n", *ptr, ptr);

  14.         return 0;
  15. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-5 18:24:08 From FishC Mobile | 显示全部楼层
指针还在,数据也在,甚至指针指向也没变
但是椎中的这段内存被释放了,可以被其他程序申请使用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-5 19:46:33 | 显示全部楼层
BngThea 发表于 2017-11-5 18:24
指针还在,数据也在,甚至指针指向也没变
但是椎中的这段内存被释放了,可以被其他程序申请使用

释放之后再*ptr = 220;  那么原先的110会变为220吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-5 19:49:01 From FishC Mobile | 显示全部楼层
wushi 发表于 2017-11-5 19:46
释放之后再*ptr = 220;  那么原先的110会变为220吗?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-5 19:53:26 | 显示全部楼层
BngThea 发表于 2017-11-5 18:24
指针还在,数据也在,甚至指针指向也没变
但是椎中的这段内存被释放了,可以被其他程序申请使用

  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. int main(void)
  4. {
  5.         int *ptr;
  6.        
  7.         ptr = (int *)malloc(sizeof(int));
  8.         *ptr = 110;
  9.         printf("%d\n", *ptr);
  10.         free(ptr);

  11.         printf("%d\n", *ptr);

  12.         return 0;       
  13. }
复制代码

结果是第一个打印出110,第二个打印出随机数,不是说ptr指向没变,整数110也在原来的内存中吗,为什么释放之后第二次打印出随机数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-5 19:59:51 From FishC Mobile | 显示全部楼层
wushi 发表于 2017-11-5 19:53
结果是第一个打印出110,第二个打印出随机数,不是说ptr指向没变,整数110也在原来的内存中吗,为什么释放 ...

因为椎中信息释放了,就有可能被其他程序占用,你可以试着打印地址看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-5 20:00:46 | 显示全部楼层    本楼为最佳答案   
ptr在,数据110应该是不在了,ptr指向的地址仍不变。
可以写个代码试试,ptr指向一直是不变的,但是因为free释放了地址所存储的空间,数据也就被释放。
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main()
  4. {
  5.         int *ptr;
  6.        
  7.         ptr = (int *)malloc(sizeof(int));

  8.         *ptr = 110;
  9.         printf("释放前:\n *ptr = %d\tptr = %p\n", *ptr, ptr);

  10.         free(ptr);
  11.         printf("释放后:\n *ptr = %d\tptr = %p\n", *ptr, ptr);

  12.         *ptr = 220;
  13.         printf("重新赋值:\n *ptr = %d\tptr = %p\n", *ptr, ptr);

  14.         return 0;
  15. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-5 21:02:59 | 显示全部楼层
丶忘却的年少o 发表于 2017-11-5 20:00
ptr在,数据110应该是不在了,ptr指向的地址仍不变。
可以写个代码试试,ptr指向一直是不变的,但是因为fr ...

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-5 21:13:02 | 显示全部楼层

不用客气
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 00:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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