实践浅解free的具体作用(C语言)
实践浅解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++编译结果的局部指针变量所指向的内容还保留外,其余内容都改变为一个随机的值。
四、实践意义
- 知道了free作用后产生的效果;
- 明白了在释放掉内存空间后还应把指向该内存空间的指针置为空,避免程序出现过多的 “ 野指针 ”。
五、作者相关
(一)、作者简介
- 作者:馗顺先生
- 简介:一个热爱程序设计与电子技术的预备猿。后续也会不定期更新一些有趣的代码,以及一些有用的算法实现。大家可以关注以下哦。最后,若有不足,希望各位大佬们不吝赐教。
(二)、联系方式
- 邮箱:2727144006@qq.com
- 博客地址: https://blog.csdn.net/qq_33519837?spm=1001.2100.3001.5113
实践浅解free的具体作用(C语言)相关推荐
- 从最大似然到EM算法浅解 http://blog.csdn.net/zouxy09/article/details/8537620
1. EM blog的举例就是group 然后就是每个group的function很有效地串联所学的知识,看到的论文,所有的思考,都是有一定的逻辑关系,如何逐渐develop你的想法,都是有一定的源头 ...
- (转载)机器学习知识点(十五)从最大似然到EM算法浅解
从最大似然到EM算法浅解 机器学习十大算法之一:EM算法.能评得上十大之一,让人听起来觉得挺NB的.什么是NB啊,我们一般说某个人很NB,是因为他能解决一些别人解决不了的问题.神为什么是神,因为神能做 ...
- EM从最大似然到EM算法浅解
从最大似然到EM算法浅解 zouxy09@qq.com http://blog.csdn.net/zouxy09 机器学习十大算法之一:EM算法.能评得上十大之一,让人听起来觉得挺NB的.什么是NB啊 ...
- 浅解国学经典《论语》之八佾第三
浅解国学经典<论语>之八佾第三 2010年12月29日 <论语>[八佾第三] [1]孔子谓季氏:"八佾舞于庭,是可忍也,孰不可忍也!" [浅读]:佾音yì, ...
- QOS 优先级 PHB,EXP,浅解 .
QOS 优先级 PHB,EXP,浅解 这两天在看QOS内容,其中涉及到PHB到EXP的映射,以及EXP到PHB的映射,有点不懂PHB是指哪一段,于是上网查找,结果找到:PHB是指IP包内原TOS ...
- 浅谈Attention机制的作用
浅谈注意力机制的作用 前言 什么是注意力机制 空间注意力 对于时间步的注意力机制 1.数据集的制作 2.建立注意力模型 3.建立整体神经网络 4.完整代码 5.实验效果 通道注意力机制 前言 Atte ...
- 项目实践精解:ASP.NET应用开发
前 言 作者从事软件设计开发工作十多年,最近才萌发了写书的想法.因为作者希望推广一种最有效的学习捷径,这就是Project-Driven Training,也就是用项目实践来带动理论学习的方法.基于此 ...
- centos 安装mysql5.7_Zabbix 4.2.5 安装部署实践详解
[导读]云计算背景下,无论是大数据.物联网还是边缘计算,规模化后大量的设备需要保证正常运行,在人员一定的情况下,就需要提高运行维护效率.同时随着智能化被应用在人们生活的方方面面,关联性也越来越紧密,即 ...
- 组件化实践详解(二)
在上一篇文章<组件化实践详解(一)>中我们介绍了组件化实践的目标和实践步骤,本文继续说说关于组件化实践遇到的问题及思考. 1.组件内的架构设计 这条本来我是不想写的,但是很多组件化的文章里 ...
最新文章
- 智办事协同办公:数字化转型下的高效工作方式
- 中兴高达和中兴啥关系_打通信息孤岛!中兴高达一体化通信指挥平台
- Lua1.0 代码分析 库
- java与c/c++进行socket通信的一些问题
- linux 培训6,Linux Syscalls有 6个参数(Linux Syscalls with 6 parameters)
- RabbitMQ之五种消息模型
- iOS宏和__attribute__
- cad打开a3样板图形_cad a3图框下载-cada3标准图框模板 dwg版 - 河东下载站
- python 主函数传参_Python函数传参方法超级大汇总
- php接dicom,DICOM医学图像处理:WEB PACS初谈四,PHP DICOM Class
- 微信小程序图片的比例问题
- 因果推断 | 因果关系推断-系列电子书资源
- 两问表和三问表哪个更少_[三问三解]关于问表和三问表的区别
- oracle中文名转拼音,oracle 汉字转拼音
- c++中fabs()和abs()的区别
- Linux (redhat)封装虚拟机镜像
- 工业自动控制过程中最好用SCADA软件推荐
- 制作京东快报页面html,HTML第6章上机练习3(制作京东快报页面)
- Phoenix(凤凰)的安装介绍
- 杀猪盘、杀鸟盘、杀鱼盘...网络诈骗为何如此难以防范?
热门文章
- golang日志服务器_日志系统 | log/syslog (log) – Go 中文开发手册 - Break易站
- python如何查询数据库_Python数据库操作手册-数据库专栏,SQL Server
- mysql表创建在哪_mysql创建表命令是哪句
- Java可视化开发开源框架
- Eclipse的正确安装使用姿势
- python【力扣LeetCode算法题库】面试题13- 机器人的运动范围(BFS)
- android 上拉隐藏布局,Recycleview上拉隐藏与下拉显示
- 参数构造错误 微信_快速掌握前端开发中的常见错误
- 为什么Android项目mainactivity中有一个变量R_【Android开发入门教程】二.Android应用程序结构分析!...
- PHP复杂度,php 算法复杂度 时间复杂度 空间复杂度