C语言——关于free()的笔记

C语言——关于free函数的笔记


因为之前把free()误认为成是把指针释放掉,所以记下笔记。(:3」∠)

通过mallo()函数来动态申请内存空间,并通过指针指向该空间地址以便对齐操作。当需要清理掉该内存所存的内容时,可以用free()函数来操作。
free(指针)不是说把该指针空间释放掉,而是把该指针所指向的地址内存空间释放掉,原先在该空间定义存的内容,会被清掉,但该指针仍然在那。指针在此的作用是为了方便对申请的地址操作的路标。

问:当2个或3个指针指向同一个内存空间,并通过一个指针对该内存空间赋值,然后再通过一个指针用free函数释放掉该空间,其它指针指向的该空间所存的值也会改变吗?
在这里插入图片描述

代码:

#include <stdio.h>
#include <stdlib.h>
typedef int* Point;
int main(void)
{
    //创建指针指向一个申请的空间
    Point p1,p2,p3;
    p1 = (Point)malloc(sizeof(int));
    //让p2、p3指针也只向p1指向的地址
    p2 = p1;
    p3 = p1;
    printf("p1=%p,p2=%p,p3=%p,*p1=%d,*p2=%d,*p3=%d\n",p1,p2,p3,*p1,*p2,*p3);
    //通过p1更改数值
    *p1 = 114514;
    printf("p1=%p,p2=%p,p3=%p,*p1=%d,*p2=%d,*p3=%d\n",p1,p2,p3,*p1,*p2,*p3);
    //free掉p1指向的空间
    free(p1);
    printf("p1=%p,p2=%p,p3=%p,*p1=%d,*p2=%d,*p3=%d\n",p1,p2,p3,*p1,*p2,*p3);
    return 0;
}

在这里插入图片描述
由运行结果得出,指向同一个内存空间的指针,当其中一个指针改变了该内存空间存的数值,其它同样指向该内存空间的指针所得出的数值也一样,因为它们就是指向同一块地方。所以当通过一个指针去free释放掉内存空间,原本定义存在改地址的数值也就没有了。但这几个指针仍然指向该地址,只是所存的原本内容没有了。

  • 10
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值