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)功 ...
随机推荐
- linux权限问题,chmod命令
Linux系统中,每个用户的角色和权限划分的很细致也很严格,每个文件(目录)都设有访问许可权限,利用这种机制来决定某个用户通过某种方式对文件(目录)进行读.写.执行等操作. 操作文件或目录的用户,有3 ...
- CF problem: (D) Maximum Product Strikes Back
Problem - D - Codeforces Example input 5 4 1 2 -1 2 3 1 1 -2 5 2 0 -2 2 -1 3 -2 -1 -1 3 -1 -2 -2 out ...
- OA办公软件篇(二)—权限管理
权限管理的背景 权限管理的作用 迭代历程 关键名词释义 权限管理模型 具体实现 写在最后 权限管理的背景 在OA办公软件篇(一)-组织架构一文中,我们说到组织架构是软件系统的权限体系的重要搭建依据 ...
- JVM内存管理面试常见问题全解
目录 一.什么是JVM 1.jvm的三个组成部分 二.类加载系统 1.类的加载过程 2.类加载器 三.双亲委派机制 1.双亲委派机制介绍 2.为什么要双亲委派机制 3.双亲委派机制的核心源码 4.全盘 ...
- 从零开始,开发一个 Web Office 套件(15):拖动边框,平移编辑器
这是一个系列博客,最终目的是要做一个基于 HTML Canvas 的.类似于微软 Office 的 Web Office 套件(包括:文档.表格.幻灯片--等等). 博客园:<从零开始, 开发一 ...
- 【安全建设】日志监控的极品工具sysmon
转载请注明出处:https://www.cnblogs.com/vitalemontea/p/16178048.html 1.前言 最近态势感知爆了某个同事有挖矿事件的告警,打开一看,就是会通过dns ...
- Promql基础语法2
数据样本 直方图类型 delta函数 运算操作 数学运算 node_disk_info / 100 当瞬时向量与标量之间进行数学运算时,数学运算符会依次作用域瞬时向量中的每一个样本值,从而得到一组新的 ...
- [源码解析] TensorFlow 分布式之 MirroredStrategy 分发计算
[源码解析] TensorFlow 分布式之 MirroredStrategy 分发计算 目录 [源码解析] TensorFlow 分布式之 MirroredStrategy 分发计算 0x1. 运行 ...
- R2DBC正式孵化成功,利好Spring Webflux
2022年4月25日,R2DBC社区宣布具有普遍可用性的1.0.0.RELEASE正式发布. R2DBC致力于为反应式编程 API操作关系型数据库带来规范支持,R2DBC不同于我们熟知的JDBC规范, ...
- 自己的~/.vimrc
" 语法高亮syntax on " 搜索高亮set hlsearch " 显示行号set number" let mapleader="," ...