鱼C论坛

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

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

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

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

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

x
其他的代码就省略了,
int* ptr = (int *)malloc(sizeof(int));

*ptr = 110;

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

int main()
{
        int *ptr;
        
        ptr = (int *)malloc(sizeof(int));

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

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

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

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> 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
指针还在,数据也在,甚至指针指向也没变
但是椎中的这段内存被释放了,可以被其他程序申请使用
#include<stdio.h>
#include<stdlib.h>

int main(void)
{
        int *ptr;
        
        ptr = (int *)malloc(sizeof(int));
        *ptr = 110;
        printf("%d\n", *ptr);
        free(ptr);

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

        return 0;        
} 
结果是第一个打印出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释放了地址所存储的空间,数据也就被释放。
#include <stdio.h>
#include <stdlib.h>

int main()
{
        int *ptr;
        
        ptr = (int *)malloc(sizeof(int));

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

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

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

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> 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-11-28 20:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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