当前位置: 首页 > news >正文

【C】分配内存的函数

#include <stdlib.h>//分配所需的内存空间,并返回一个指向它的指针。
void *malloc(size_t size);//分配所需的内存空间,并返回一个指向它的指针。并且calloc负责把这块内存空间用字节0填//充,而malloc并不负责把分配的内存空间清零
void *calloc(size_t nmemb, size_t size);void *realloc(void *ptr, size_t size);
返回值:成功返回所分配内存空间的首地址,出错返回NULL

有时候用malloccalloc分配的内存空间使用了一段时间之后需要改变它的大小,一种办法是调用malloc分配一块新的内存空间,把原内存空间中的数据拷到新的内存空间,然后调用free释放原内存空间。使用realloc函数简化了这些步骤,把原内存空间的指针ptr传给realloc,通过参数size指定新的大小(字节数),realloc返回新内存空间的首地址,并释放原内存空间。新内存空间中的数据尽量和原来保持一致,如果size比原来小,则前size个字节不变,后面的数据被截断,如果size比原来大,则原来的数据全部保留,后面长出来的一块内存空间未初始化(realloc不负责清零)。注意,参数ptr要么是NULL,要么必须是先前调用malloccallocrealloc返回的指针,不能把任意指针传给realloc要求重新分配内存空间。作为两个特例,如果调用realloc(NULL, size),则相当于调用malloc(size),如果调用realloc(ptr, 0)ptr不是NULL,则相当于调用free(ptr)

#include <alloca.h>void *alloca(size_t size);
返回值:返回所分配内存空间的首地址,如果size太大导致栈空间耗尽,结果是未定义的

参数size是请求分配的字节数,alloca函数不是在堆上分配空间,而是在调用者函数的栈帧上分配空间,类似于C99的变长数组,当调用者函数返回时自动释放栈帧,所以不需要free。这个函数不属于C标准库,而是在POSIX标准中定义的。

http://www.lryc.cn/news/27053.html

相关文章:

  • IDEA 断点总是进入class文件没有进入源文件解决
  • 【flink】 flink入门教程demo 初识flink
  • LeetCode 1487. 保证文件名唯一
  • 详细剖析|袋鼠云数栈前端框架Antd 3.x 升级 4.x 的踩坑之路
  • 【C++PrimerPlus】第三章 处理数据
  • 【基础算法】单链表的OJ练习(1) # 反转链表 # 合并两个有序链表 #
  • 离散数学笔记(1)命题逻辑
  • IDEA Android 网格布局(GridLayout)示例(计算器界面布局)
  • 【蓝桥杯嵌入式】拓展板之数码管显示
  • Web Spider案例 网洛克 第三题 AAEncode加密 练习(七)
  • 【javaScript面试题】2023前端最新版javaScript模块,高频24问
  • Hadoop集群启动从节点没有DataNode
  • FIFO IP Core
  • 从FPGA说起的深度学习(四)
  • pytorch入门7--自动求导和神经网络
  • QT 之wayland 事件处理分析基于qt5wayland5.14.2
  • 【this 和 super 的区别】
  • K8s:Monokle Desktop 一个集Yaml资源编写、项目管理、集群管理的 K8s IDE
  • 自动化测试实战篇(8),jmeter并发测试登录接口,模拟从100到1000个用户同时登录测试服务器压力
  • ATTCK v12版本战术实战研究—持久化(二)
  • python函数式编程
  • 3.linux下安装mysql
  • 17、MySQL分库分表,原理实战
  • 【C++的OpenCV】第九课-OpenCV图像常用操作(六):图像形态学-阈值的概念、功能及操作(threshold()函数))
  • [Java代码审计]—MCMS
  • 《程序员面试金典(第6版)》面试题 01.08. 零矩阵
  • 初识 Python
  • 常用sql语句分享
  • 极狐GitLab DevSecOps 为企业许可证安全合规保驾护航
  • 后端程序员的前端基础-前端三剑客之HTML