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

【C/C++语言系列】malloc、calloc和realloc区别和用法

这三个函数都是在堆区分配内存的函数,头文件都是:

#include<stdlib.h>

下面分别介绍这三个函数:

malloc:

函数原型

void *malloc(unsigned int num_bytes);

功能:堆区开辟一段内存空间
num_nytes:要开辟的内存字节数
返回值:新开辟内存的首地址
初始值:随机
常规用法:

int* a = malloc(sizeof(int)*10);

calloc:

函数原型:

void *calloc(size_t n, size_t size);

功能:堆区开辟一段内存空间
n:n个数
size:每个数的字节数
返回值:新开辟内存的首地址
初始值:0
常规用法:

int b = calloc(10, sizeof(int));

realloc:

函数原型:

void *realloc(void *mem_address, unsigned int newsize);

功能:修改以前在堆区分配过的内存大小
mem_address:以前分配过内存地址
newsize:修改后的字节数
返回值:修改内存大小后的地址
常规用法:

int* c = malloc(10*sizeof(int));  
c = realloc(c, 20);  //新内存大小为20

注意:
newsize如果小于以前的size,那么就会缩减,如果继续访问不在缩减后的地址,会报错。
newsize如果大于以前的size,分两种情况:原地址后面有足够空间分配newsize个地址,返回原地址;原地址后面不够分配,那么会重新找一块内存,把原来的值复制过来,返回新地址。

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

相关文章:

  • 【Linux】POSIX信号量与、基于环形队列实现的生产者消费者模型
  • Spring Boot-消息队列相关问题
  • [数据集][目标检测]岩石种类检测数据集VOC+YOLO格式4766张9类别
  • 图像分割基本知识
  • LIN总线CAPL函数——干扰LIN帧响应段(linInvertRespBit )
  • 【30天玩转python】网络编程基础
  • 【PCB工艺】如何实现PCB板层间的互连
  • FastAPI--如何自定义Docs UI,包括多个APP、静态资源、元数据等
  • 【FPGA XDMA AXI Bridge 模式】PCIe:BARs 和 AXI:BARs 含义解析
  • 嵌入式-QT学习-小练习
  • 使用 Flask-Limiter 和 Nginx 实现接口访问次数限制
  • 【数据结构】排序算法---冒泡排序
  • mysql数据库中事务锁的机制
  • 并发工具类-CountDownLatch
  • 进程的重要函数
  • python 实现average median平均中位数算法
  • HTML概述
  • 【FFT】信号处理——快速傅里叶变换【通俗易懂】
  • 电脑升级WIN11之后需要注意哪些东西
  • GEE 教程:利用sentinel-5p数据进行长时序CO一氧化碳的监测分析并结合夜间灯光数据分析
  • 【教程】鸿蒙ARKTS 打造数据驾驶舱---前序
  • Html css样式总结
  • 决策树基础概论
  • Spring Boot集成Akka Cluster快速入门Demo
  • django学习入门系列之第十点《A 案例: 员工管理系统10》
  • Unity实战案例全解析:PVZ 植物卡片状态分析
  • 判断变量是否为有限数字(非无穷大或NaN)math.isfinite() 判断变量是否为无穷大(正无穷大或负无穷大)math.isinf()
  • idea使用阿里云服务器运行jar包
  • 解决nginx代理SSE接口的响应没有流式返回
  • 11 - TCPClient实验