C语言学习之我见-malloc和free内存申请及释放函数
malloc函数负责向计算机申请确定大小的内存空间。
free函数负责释放malloc的申请空间。
(1)函数原型
void free(void *_Memory);
void * malloc(size_t _Size)
(2)头文件
stdlib.h
(3)功能
malloc负责申请size_t _Size大小的内存空间,并且把所申请得到的内存空间首地址,
作为void*返回。用户往往必须把void*强制转换。
(注意:进程不会自动释放malloc申请的变量,无论是在主函数还是子函数,都不会)
正因为malloc申请内存不会自动释放,所以使用malloc必须配套free主动释放,否则申请
的内存空间将会一直存在到进程被结束。如果申请过多,会导致内存溢出
(4)基础实例代码
char* ptc = (char*)malloc(30*sizeof(char));
int* pti = (int*)malloc(30*sizeof(int));
for(int i=0;i<30;++i)
{
printf("%d ",ptc[i]);//用来依次输出每个字符
}
for(int i=0;i<30;++i)
{
printf("%d ",pti[i]);
}p
free(ptc);
free(pti);
(5)输出情况

(6)基础实例代码2:
char* ptc = (char*)malloc(30*sizeof(char));
int* pti = (int*)malloc(10*sizeof(int));
char a[]="zobol's Magic Cabin";
int b[10]={1,2,3,4,5,6,7,8,9,10};
strcpy(ptc,a);//字符串复制
memcpy(pti,b,10*sizeof(int)); //数组内存复制,注意第三个参数是以字节为单位
printf("%s\n",ptc);//输出
for(int i=0;i<10;++i)
{
printf("%d ",pti[i]);
}
(7)输出情况:

(8)问题1:如果不用free释放malloc申请的内存,会发生什么事?
回答:那你只需要很简短的代码就可以榨干你的电脑的内存。
for(int i=0;i<99999999;++i)
{
malloc(300000);
}
(9)如果不用指针接住malloc申请的内存空间的地址,会发生什么事情?
回答:malloc已经向计算机申请了空间了,但是你没有保存返回的空间内存地址,那就等于白占用看计算机空间。
(10)在子函数内部malloc申请的空间,会不会随着子函数结束而释放?
回答:不会!C语言给予了程序员绝对的自由,malloc申请的空间,除了程序员主动调用malloc以外,绝对不会被程序自动释放。
如果有帮助,欢迎关注我的个人公众号:zobol的魔法藏书室
C语言学习之我见-malloc和free内存申请及释放函数的更多相关文章
- C++学习011-常用内存分配及释放函数
C++用有多种方法来分配及释放内存,下面是一些经常使用的内存分配及释放函数 现在我还是一个技术小白,一般用到也指示 new+delete 和 malloc和free 其他的也是在学习中看到,下面的文字 ...
- C语言学习之我见-strcpy()字符串复制函数
strcpy()函数,用于两个字符串值的复制. (1)函数原型 char * strcpy(char * _Dest,const char * _Source); (2)头文件 string.h (3 ...
- C语言学习之我见-strncat()可调整的字符串拼接函数
strncat()函数,用于两个字符串的拼接. (1)函数原型 char * strncat(char * Dest,const char * Source,size_t _Count)` (2)头文 ...
- C语言学习之我见-strcat()字符拼接函数(有缺陷)
strcat()函数,用于两个字符串的拼接. (1)函数原型: char * strcat(char *Dest,const char * Source); (2)头文件: #include < ...
- C语言学习之我见-strlen()字符串长度函数
strlen()函数,负责给出字符串的长度.注意是字符串的长度,不是字符数组的长度. (1)函数原型: size_t __cdecl strlen(const char *_Str); (2)头文件` ...
- C语言学习之我见-memchr()内存查找字符函数
memchr()内存查找字符函数:主要用于从内存中查找自己需要的字符位置. (1)函数原型: void *memchr(const void *_Buf ,int _Val,size_t _MaxCo ...
- C语言学习之我见-strncpy()字符串复制函数(可控制范围)
strncpy()函数,用于两个字符串值的复制. (1)函数原型 char *strncpy(char * _Dest,const char * _Source,size_t _Count); (2) ...
- C语言学习之我见-strncmp()字符串比较函数(控制范围)
strncmp()函数,用于范围内,两个字符串的比较,n表示最大比较范围. (1)函数原型 int strncmp(const char *_Str1,const char *_Str2,size_t ...
- C语言学习之我见-strcmp()字符串比较函数
strcmp()函数,用于两个字符串的比较. (1)函数原型 int strcmp(const char *_Str1,const char *_Str2); (2)头文件 string.h (3)功 ...
随机推荐
- Oracle数据库包括两个部分数据库和数据库实例
olsnodes,这个命令用来显示集群点列表(grid即oracle rac的第三个安装包内的软件,可找到) //集群名称[grid@shdb02 ~]$ olsnodes -cshfpdb-clus ...
- java的collection类
collection来源于java.util包. Collection 接口常用的方法 size():返回集合中元素的个数 add(Object obj):向集合中添加一个元素 addAll(Coll ...
- Adobe Xd 练习
作业要求: 我的work: 下载练习: 2020_3/work.xd 参考教程: https://www.youtube.com/watch?v=dbpGJU4WL1U
- python 包之 redis 数据库操作教程
一.安装 redis 是一个 Key-Value 数据库 Value 支持 string(字符串),list(列表),set(集合),zset(有序集合),hash(哈希类型)等类型 pip inst ...
- MQTT物联网通讯协议入门
目录 一.MQTT协议概念 发布/订阅机制 MQTT客户端 Broker代理(服务器) MQTT消息结构 二.MQTT协议实现原理 MQTT连接 MQTT消息发布 MQTT订阅机制 MQTT订阅确认 ...
- 基于Ansible实现Apache Doris快速部署运维指南
Doris Ansible 使用指南 Apache Doris 介绍 Apache Doris是一个现代化的MPP分析型数据库产品.仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析.Apac ...
- Nessus如何解除IP限制以及解决重启失效的后遗症
Nessus如何解除IP限制以及解决重启失效的后遗症 1.解除IP限制 1.获取当前plugins的版本号. https://plugins.nessus.org/v2/plugins.php 2.停 ...
- axios源码解析 - 请求方法的别名实现
axios中的创建请求方式很多,比如axios(url),axios.get(url),axios.post(url),axios.delete(url),方便快捷的api设计让axios火得一塌糊涂 ...
- 防火墙之ipset表应用
简介 由于公司线上生产环境firewalld默认都是关闭的,所以只能依赖iptables的表来方便管理IP黑白名单. 提示线上生产环境不要随便重启iptables,会导致docker已经映射好的关系表 ...
- FinClip 前端之 VUE 核心原理总结
小程序框架有很多,都是支持前端JavaScript语言的,也是支持 vue.js 框架的.FinClip 小程序是兼容各家平台的.所以在学习了框架使用之后的进阶就要熟悉框架的底层原理. 1.数据响应式 ...