当我们需要做一个成绩管理系统,人数可能为全校学生,也可能为一个班的学生,当我们开辟一个班的数组大小时,如果要存储整个学校的人数时,会出现内存不够用的情况;当我们开辟全校人数大小的数组时,输入一个班人数的大小时,会出现内存浪费的情况。
为了应对上述问题,我们引入malloc函数。
malloc时动态内存分配函数,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址

malloc函数原型

extern void *malloc(unsigned int num_bytes);

意为分配长度为num_bytes字节的内存块

malloc函数头文件

#include<malloc.h>

malloc函数返回值

如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。

malloc函数使用注意事项

malloc函数的返回的是无类型指针,在使用时一定要强制转换为所需要的类型。
**(敲黑板)重点:在使用malloc开辟空间时,使用完成一定要释放空间,如果不释放会造内存泄漏。
在使用malloc函数开辟的空间中,不要进行指针的移动,因为一旦移动之后可能出现申请的空间和释放空间大小的不匹配

malloc函数使用形式

关于malloc所开辟空间类型:malloc只开辟空间,不进行类型检查,只是在使用的时候进行类型的强转。
举个例子:‘我’开辟你所需要大小的字节大小空间,至于怎么使用是你的事
mallo函数返回的实际是一个无类型指针,必须在其前面加上指针类型强制转换才可以使用
指针自身 = (指针类型*)malloc(sizeof(指针类型)*数据数量)

 int *p = NULL;int n = 10;p = (int *)malloc(sizeof(int)*n);

在使用malloc函数之前我们一定要计算字节数,malloc开辟的是用户所需求的字节数大小的空间。
如果多次申请空间那么系统是如何做到空间的不重复使用呢?
在使用malloc开辟一段空间之后,系统会在这段空间之前做一个标记(0或1),当malloc函数开辟空间如果遇到标记为0就在此开辟,如果为1说明此空间正在被使用。

free函数

作用:释放malloc(或calloc、realloc)函数给指针变量分配的内存空间。
注意:使用后该指针变量一定要重新指向NULL,防止悬空指针(失效指针)出现,有效规避错误操作。

int main()
{int *p = (int *)malloc(sizeof(int));*p = 100;free(p);p = NULL;return 0;

free函数在释放空间之后,把内存前的标志变为0,且为了防止数据泄露,它会把所释放的空间用cd进行填充。

c语言malloc函数的用法和意义相关推荐

  1. c语言malloc函数程序,c语言 malloc函数详解

    谈到malloc函数相信学过c语言的人都很熟悉,但是malloc底层到底做了什么又有多少人知道. 1.关于malloc相关的几个函数 关于malloc我们进入Linux man一下就会得到如下结果: ...

  2. linux c语言 malloc动态分配指针,C语言malloc函数为一维,二维,三维数组分配空间...

    c语言允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放,这些数据存储在堆区.可以根据需要,向系统申请 ...

  3. c语言malloc函数用法_小白对c语言数组的基础总结

    数组 数组是一系列相同类型元素有序的集合. 数组的定义: 一般形式为: 类型符 数组名 [常量表达式] 如 int a[5]; 表示数组有五个元素,a[0]-a[5],不存在元素a[5]. *注意: ...

  4. C语言malloc函数的功能及用法

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站 点击跳转浏览. https://blog.csdn.net/qq_26501341/article/d ...

  5. c语言malloc申请三维数组,C语言malloc函数为一维,二维,三维数组分配空间

    c语言允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放,这些数据存储在堆区.可以根据需要,向系统申请 ...

  6. C语言malloc函数为一维,二维,三维数组分配空间

    c语言允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放,这些数据存储在堆区.可以根据需要,向系统申请 ...

  7. c语言 malloc 函数用法

    函数声明: Tips: void的字面意思是"无类型",void *则为"无类型指针",void *可以指向任何类型的数据. malloc 函数申请空间需要使用 ...

  8. C语言-malloc()函数与calloc()函数的使用及区别

    1.malloc()函数 功能 申请堆内存 所需头文件 #include<stdlib.h> 函数原型 void *malloc(size_t,size); 参数(size) 所申请的一块 ...

  9. c语言malloc函数用法_C语言内存模型!小本本记起来啊!

    一.C语言的内存分配模型 1.程序代码区:存放函数体的二进制代码. 2.全局区数据区:全局数据区划分为三个区域.全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全 ...

  10. 甜甜C语言—malloc()函数

    文章目录 一:函数简介 二:函数机制 (一)头文件 函数原型 (二)函数功能 (三)返回值 (四)参数传递 三:空间的释放 (一)free()函数 四:函数使用 (一)例题 (二) 解题思路 (三)答 ...

最新文章

  1. 学会 IDEA REST Client后,postman就可以丢掉了...
  2. C# ToString()用法汇总
  3. .Net 应用程序体系结构—C#高级编程(第10版)学习笔记5
  4. 学习实践 - 收藏集 - 掘金
  5. c语言time_t转oletime,DateTimeFormatter可以格式化日期,但不能读取它自己的格式
  6. PHP PDO 简单登陆操作
  7. 15天玩转redis —— 第四篇 哈希对象类型
  8. kvm虚拟机_关于虚拟机管理KVM,基本操作都在这里,懒人必备,拿去收藏
  9. Python绘制简单漂亮好玩的散点图
  10. java毕业设计房屋租赁管理系统Mybatis+系统+数据库+调试部署
  11. QTableWidget设置Item不可编辑状态
  12. 微信服务号只有域名没有80端口怎么办
  13. 如何添加打印机到电脑
  14. python面板数据模型操作步骤_面板数据分析方法步骤全解
  15. 基于扰动观测器的直流电机调速系统,(售出不退慎拍!) 有计算公式,仿真模型
  16. 几何分布的期望公式的推导
  17. Xshell 6免费安装
  18. 分布式任务调度系统设计:详解Go实现任务编排与工作流
  19. 组合和聚合举例说明_聚合关系和组合关系示例
  20. 2021国内十大正规外汇投资理财app平台排行榜

热门文章

  1. Linux合入patch命令,Linux下Patch命令用来打补丁和卸载补丁
  2. 程序带来这些新的机会,创业新浪潮才刚开始!
  3. 数学建模——stata基础操作
  4. 安鸾靶场--暴力破解
  5. 日志文件的格式和内容,日志文件的作用,登记日志文件的规则
  6. 软件工程复习提纲——第六章
  7. windows强制删除文件
  8. 一个人竟然撸了一个百度网盘客户端
  9. NES专题——一块带给无数人年少欢乐的CPU(6502)
  10. 浏览器内核的解析和对比