实践浅解free的具体作用

  • 实践free()在C语言中的作用
    • 一、问题背景
    • 二、实践
      • (一)、实践代码
      • (二)、gcc version 9.2.0编译运行结果
      • (三)、Dev C++中TDM-GCC 4.9.2 64bit release编译运行结果
      • (四)、Visual Studio 2019编译运行结果
    • 三、实践结果结论
    • 四、实践意义
    • 五、作者相关
      • (一)、作者简介
      • (二)、联系方式

实践free()在C语言中的作用

一、问题背景

某天在做数据结构留下的实验报告时,知道了malloc()和free()必须同时调用以避免内存泄漏,然而并不知道free究竟干了那些操作,所以尝试用实践的方法解释free()这个函数到底有啥用。

二、实践

(一)、实践代码

// 看看free到底有啥用, 为了方便查看,就不把输出封装成函数了
#include <stdlib.h>
#include <stdio.h>int * a = NULL;        // 定义一个全局整形指针int main (void)
{a = (int *)malloc(sizeof(int));       // 让全局指针指向一个malloc分配的空间int * c = (int *)malloc(sizeof(int));   // 定义一个局部指针并指向malloc分配的空间int * p = a;  // 再定义两个局部指针存储a,c指向的内存空间int * q = c;*a = 15;   // 为两块内存空间内置入值*c = 30;printf("*a = %d\t*c = %d\n", *a, *c);printf("*p = %d\t*q = %d\n", *p, *q);printf("a = %p\tc = %p\n", a, c);printf("p = %p\tq = %p\n", p, q);puts("");free(a);  // 释放内存空间free(c);printf("*a = %d\t*c = %d\n", *a, *c);printf("*p = %d\t*q = %d\n", *p, *q);printf("a = %p\tc = %p\n", a, c);printf("p = %p\tq = %p\n", p, q);puts("");*p = 20;   // 尝试对已经释放的内存空间赋值*q = 50;printf("*a = %d\t*c = %d\n", *a, *c);printf("*p = %d\t*q = %d\n", *p, *q);printf("a = %p\tc = %p\n", a, c);printf("p = %p\tq = %p\n", p, q);puts("");return 0;
}

(二)、gcc version 9.2.0编译运行结果

*a = 15 *c = 30
*p = 15 *q = 30
a = 007D16D8    c = 007D1678
p = 007D16D8    q = 007D1678*a = 8197752    *c = 8197808
*p = 8197752    *q = 8197808
a = 007D16D8    c = 007D1678
p = 007D16D8    q = 007D1678*a = 20 *c = 50
*p = 20 *q = 50
a = 007D16D8    c = 007D1678
p = 007D16D8    q = 007D1678

(三)、Dev C++中TDM-GCC 4.9.2 64bit release编译运行结果

*a = 15 *c = 30
*p = 15 *q = 30
a = 0000000000BB13C0    c = 0000000000BB13E0
p = 0000000000BB13C0    q = 0000000000BB13E0*a = 12255568   *c = 30
*p = 12255568   *q = 30
a = 0000000000BB13C0    c = 0000000000BB13E0
p = 0000000000BB13C0    q = 0000000000BB13E0*a = 20 *c = 50
*p = 20 *q = 50
a = 0000000000BB13C0    c = 0000000000BB13E0
p = 0000000000BB13C0    q = 0000000000BB13E0

(四)、Visual Studio 2019编译运行结果

*a = 15 *c = 30
*p = 15 *q = 30
a = 0000024428A00850    c = 0000024428A099E0
p = 0000024428A00850    q = 0000024428A099E0*a = -572662307 *c = -572662307
*p = -572662307 *q = -572662307
a = 0000024428A00850    c = 0000024428A099E0
p = 0000024428A00850    q = 0000024428A099E0*a = 20 *c = 50
*p = 20 *q = 50
a = 0000024428A00850    c = 0000024428A099E0
p = 0000024428A00850    q = 0000024428A099E0

VS报的warning。

三、实践结果结论

  • 在以上三个编译器的运行结果中,free函数只是释放了内存,并没有改变指针所指向的值;
  • 在free释放内存之后,仍然可以通过指针访问修改释放掉内存的空间
  • 在free释放内存之后,除Dev C++编译结果的局部指针变量所指向的内容还保留外,其余内容都改变为一个随机的值

四、实践意义

  1. 知道了free作用后产生的效果;
  2. 明白了在释放掉内存空间后还应把指向该内存空间的指针置为空,避免程序出现过多的 “ 野指针 ”

五、作者相关

  • (一)、作者简介

    • 作者:馗顺先生
    • 简介:一个热爱程序设计与电子技术的预备猿。后续也会不定期更新一些有趣的代码,以及一些有用的算法实现。大家可以关注以下哦。最后,若有不足,希望各位大佬们不吝赐教。
  • (二)、联系方式

    • 邮箱:2727144006@qq.com
    • 博客地址: https://blog.csdn.net/qq_33519837?spm=1001.2100.3001.5113

实践浅解free的具体作用(C语言)相关推荐

  1. 从最大似然到EM算法浅解 http://blog.csdn.net/zouxy09/article/details/8537620

    1. EM blog的举例就是group 然后就是每个group的function很有效地串联所学的知识,看到的论文,所有的思考,都是有一定的逻辑关系,如何逐渐develop你的想法,都是有一定的源头 ...

  2. (转载)机器学习知识点(十五)从最大似然到EM算法浅解

    从最大似然到EM算法浅解 机器学习十大算法之一:EM算法.能评得上十大之一,让人听起来觉得挺NB的.什么是NB啊,我们一般说某个人很NB,是因为他能解决一些别人解决不了的问题.神为什么是神,因为神能做 ...

  3. EM从最大似然到EM算法浅解

    从最大似然到EM算法浅解 zouxy09@qq.com http://blog.csdn.net/zouxy09 机器学习十大算法之一:EM算法.能评得上十大之一,让人听起来觉得挺NB的.什么是NB啊 ...

  4. 浅解国学经典《论语》之八佾第三

    浅解国学经典<论语>之八佾第三 2010年12月29日 <论语>[八佾第三] [1]孔子谓季氏:"八佾舞于庭,是可忍也,孰不可忍也!" [浅读]:佾音yì, ...

  5. QOS 优先级 PHB,EXP,浅解 .

     QOS 优先级 PHB,EXP,浅解 这两天在看QOS内容,其中涉及到PHB到EXP的映射,以及EXP到PHB的映射,有点不懂PHB是指哪一段,于是上网查找,结果找到:PHB是指IP包内原TOS ...

  6. 浅谈Attention机制的作用

    浅谈注意力机制的作用 前言 什么是注意力机制 空间注意力 对于时间步的注意力机制 1.数据集的制作 2.建立注意力模型 3.建立整体神经网络 4.完整代码 5.实验效果 通道注意力机制 前言 Atte ...

  7. 项目实践精解:ASP.NET应用开发

    前 言 作者从事软件设计开发工作十多年,最近才萌发了写书的想法.因为作者希望推广一种最有效的学习捷径,这就是Project-Driven Training,也就是用项目实践来带动理论学习的方法.基于此 ...

  8. centos 安装mysql5.7_Zabbix 4.2.5 安装部署实践详解

    [导读]云计算背景下,无论是大数据.物联网还是边缘计算,规模化后大量的设备需要保证正常运行,在人员一定的情况下,就需要提高运行维护效率.同时随着智能化被应用在人们生活的方方面面,关联性也越来越紧密,即 ...

  9. 组件化实践详解(二)

    在上一篇文章<组件化实践详解(一)>中我们介绍了组件化实践的目标和实践步骤,本文继续说说关于组件化实践遇到的问题及思考. 1.组件内的架构设计 这条本来我是不想写的,但是很多组件化的文章里 ...

最新文章

  1. 智办事协同办公:数字化转型下的高效工作方式
  2. 中兴高达和中兴啥关系_打通信息孤岛!中兴高达一体化通信指挥平台
  3. Lua1.0 代码分析 库
  4. java与c/c++进行socket通信的一些问题
  5. linux 培训6,Linux Syscalls有 6个参数(Linux Syscalls with 6 parameters)
  6. RabbitMQ之五种消息模型
  7. iOS宏和__attribute__
  8. cad打开a3样板图形_cad a3图框下载-cada3标准图框模板 dwg版 - 河东下载站
  9. python 主函数传参_Python函数传参方法超级大汇总
  10. php接dicom,DICOM医学图像处理:WEB PACS初谈四,PHP DICOM Class
  11. 微信小程序图片的比例问题
  12. 因果推断 | 因果关系推断-系列电子书资源
  13. 两问表和三问表哪个更少_[三问三解]关于问表和三问表的区别
  14. oracle中文名转拼音,oracle 汉字转拼音
  15. c++中fabs()和abs()的区别
  16. Linux (redhat)封装虚拟机镜像
  17. 工业自动控制过程中最好用SCADA软件推荐
  18. 制作京东快报页面html,HTML第6章上机练习3(制作京东快报页面)
  19. Phoenix(凤凰)的安装介绍
  20. 杀猪盘、杀鸟盘、杀鱼盘...网络诈骗为何如此难以防范?

热门文章

  1. golang日志服务器_日志系统 | log/syslog (log) – Go 中文开发手册 - Break易站
  2. python如何查询数据库_Python数据库操作手册-数据库专栏,SQL Server
  3. mysql表创建在哪_mysql创建表命令是哪句
  4. Java可视化开发开源框架
  5. Eclipse的正确安装使用姿势
  6. python【力扣LeetCode算法题库】面试题13- 机器人的运动范围(BFS)
  7. android 上拉隐藏布局,Recycleview上拉隐藏与下拉显示
  8. 参数构造错误 微信_快速掌握前端开发中的常见错误
  9. 为什么Android项目mainactivity中有一个变量R_【Android开发入门教程】二.Android应用程序结构分析!...
  10. PHP复杂度,php 算法复杂度 时间复杂度 空间复杂度