空间申请(malloc)与释放(free)——C语言

文章目录

  • 空间申请(malloc)与释放(free)——C语言
  • 1. malloc与free函数

1. malloc与free函数

参考链接:

https://blog.csdn.net/qq_42565910/article/details/90346236?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164905582216780265428895%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=164905582216780265428895&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-90346236.142v5pc_search_result_control_group,157v4control&utm_term=malloc%E5%87%BD%E6%95%B0&spm=1018.2226.3001.4187

(1)头文件:

#include <malloc.h>

(2)malloc函数原型

​ 返回的是一个void 类型的指针。

extern void *malloc(unsigned int num_bytes);

(3)free函数

**①作用:**释放malloc与calloc申请的空间

**②形式:**free(malloc与calloc申请的空间返回的指针)

例子:

//test malloc and free
void test03() {char *str = NULL;int i = 0;str = (char *)malloc(sizeof(char) * 3);str[0] = 'w';str[1] = 'e';str[2] = 'g';for (i = 0; i < 3; ++i) {printf("str[%d] = %c\n", i, str[i]);}free(str);str = NULL;
}

结果:

str[0] = w

str[1] = e

str[2] = g

(4)注意事项

①使用了malloc函数申请了空间,为了避免内存泄漏,就要使用free函数释放空间,释放后并把指针置NULL。

②申请空间后的指针不能移动,不然释放失败。

③申请多少空间就使用多少空间,不能越界访问空间,不然会释放失败。

例子:

​ 申请了两个字节的空间,却访问了第三个字节的空间,free释放str的时候没有办法去释放没有申请的空间,导致程序出错。

void test03() {char *str = NULL;int i = 0;str = (char *)malloc(sizeof(char) * 2);//只申请了两个字节的空间str[0] = 'w';str[1] = 'e';str[2] = 'g';//越界访问第三个字节for (i = 0; i < 3; ++i) {printf("str[%d] = %c\n", i, str[i]);}free(str);str = NULL;
}

结果:

程序报错

空间申请(malloc)与释放(free)——C语言相关推荐

  1. C语言动态申请内存空间之malloc(),calloc(),realloc()函数

    在C语言中用于动态申请内存空间的函数主要为malloc()函数,calloc()函数,以及realloc()函数,以下主要介绍三个函数的用法,区别以及使用时的注意事项. malloc(),calloc ...

  2. C语言学习笔记——堆区空间申请(一)

    C语言学习笔记 堆区空间申请(一) 栈区变量分析 所有程序/软件的运行,都是由操作系统统一调配的,操作系统是程序的运行环境 运行中的多个程序之间,内存是不交叉的 程序结束后,操作系统还要释放其使用的资 ...

  3. linux malloc free 内存碎片_内存申请malloc/new与内存释放free/delete的区别

    前面的文章小编说过,存放在堆上的数据是由程序员小哥哥负责申请和回收的.今天我们就说一下动态申请内存的指令以及他们之间的区别.最普遍的申请内存方式就是malloc/free与new/delete; 为了 ...

  4. c语言malloc引用类型作参数,C语言动态内存函数的理解和总结

    第一:内存的使用 内存可以分为以下三个主要的部分:栈区.堆区.静态区 栈区(stack):存放的是局部变量.函数的形参等都是在该区上存放的. 堆区(heap):动态内存函数开辟的空间.比如malloc ...

  5. C++动态空间申请、动态对象(new与delete运算)

    文章目录 一.动态空间申请 二.动态对象的使用 一.动态空间申请 #include <iostream> #include <string.h> #include <st ...

  6. openshift 3 mysql_最新OpenShift免费空间申请与使用教程-1G内存1G空间支持PHP和MysqL

    一.OpenShift空间申请使用前必备工具 1.OpenShift官网: 1.官方网站:https://www.openshift.com/ 2.OpenShift V3:https://manag ...

  7. Coding.net代码托管空间申请与使用

    Coding.net这是一个国内新兴的代码托管平台,功能主要包括:代码托管.在线运行环境.监控代码质量,兼有一定的社交功能,在线运行环境支持Java.Ruby.Node.js.PHP.Python.G ...

  8. 内存池:申请内存与释放内存

    1.内存池简介 内存池是池化技术中的一种形式.通常我们在编写程序的时候回使用 new delete 这些关键字来向操作系统申请内存,而这样造成的后果就是每次申请内存和释放内存的时候,都需要和操作系统的 ...

  9. BUAA(2021春)空闲空间申请模拟(期中考试题)——注意读题,难度其实一般

    BUAA数据结构期中考试题--空闲空间申请模拟 看前须知 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 笔者的抱怨和思路详解 参考代码 补充测试的数据 看前须知 要点介绍和简要声明. ...

最新文章

  1. 为什么 Linux 需要虚拟内存
  2. Java基础部分笔记----------网络编程
  3. linux系统中cache清理/释放命令
  4. mybatis-MyBatis-Plus
  5. php怎么做免登录,php---一周内免登录
  6. (转)Spring Boot(十一):Spring Boot 中 MongoDB 的使用
  7. python后台架构Django开发全解
  8. Android--从相册中选取照片并返回结果
  9. 软件测试项目实战,适合大家练习的实战项目有。
  10. 怎么清理C盘释放空间 ?
  11. Vue3快速学习、vue3视频学习、vue3实例上手教程
  12. 使用spark-md5获取文件md5值
  13. 神经网络中的filter(滤波器)和kernel(内核)的概念
  14. 密码框password调用数字键盘
  15. 网络工程师有什么发展?
  16. 新一代SSD接口来了 | M.2接口发福版?
  17. 2018 Macbook pro 15(10.13.6)安装Nvidia 1070(Aorus Gaming Box)显卡驱动
  18. TPT Autotester|高效快捷的车辆在环ViL测试工具
  19. Linux 内核源码中likely()和unlikely()
  20. 修改so文件的关键方法

热门文章

  1. BlueTooth: 什么是蓝牙(Bluetooth)
  2. [有感]_给天蓝管理层的诺干建议
  3. 魔力宝贝服务器修改技能经验,【石器时代】 GM添加、命令使用、经验及倍数设置、宠添加、查找及修改【附图】...
  4. k8s中pod删除不了的原因和正确的删除方法
  5. 二手书网页版mis系统
  6. mysql第五次作业 查询数据
  7. AutoAugment: Learning Augmentation Strategies from Data
  8. 2022腾讯云年终双十一活动攻略汇总!
  9. 五类、超五类、六类跳线
  10. DLL文件应该放在哪里?