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

malloc、calloc、realloc

特性malloccallocrealloc
参数总字节数 size元素个数 nmemb + 单个元素大小 size原内存指针 ptr + 新大小 size
初始化不初始化,内存内容为随机值自动初始化为 0不改变原有数据(新扩展部分为随机值)
典型用途分配无需初始化的内存(如临时缓冲区)分配需初始为 0 的数组 / 结构体动态调整内存大小(如数组扩容、收缩)
返回值新内存指针(失败返回 NULL新内存指针(失败返回 NULL调整后的内存指针(失败返回 NULL,原内存不变)

3. 示例对比

(1)基础内存分配
// malloc:分配 10 个 int 的内存(未初始化)
int *arr1 = (int*)malloc(10 * sizeof(int));  //一个传参// calloc:分配 10 个 int 的内存(自动初始化为 0)
int *arr2 = (int*)calloc(10, sizeof(int));   //两个传参
(2)用 realloc 调整内存大小
// 初始分配 10 个 int
int *arr = (int*)malloc(10 * sizeof(int));
if (arr == NULL) { /* 处理错误 */ }// 扩展为 20 个 int(扩容)
int *new_arr = (int*)realloc(arr, 20 * sizeof(int));
if (new_arr == NULL) {// 扩容失败,原内存 arr 仍有效free(arr);return -1;
}
arr = new_arr; // 更新指针到新内存// 使用扩展后的内存...// 收缩为 5 个 int(缩容)
arr = (int*)realloc(arr, 5 * sizeof(int));

 realloc 的特殊行为

  • 内存移动:若原内存块附近有足够空间,realloc 会直接扩展当前块;否则会分配新内存块,复制原有数据,并释放旧块(因此新指针可能与原指针不同)。
http://www.xdnf.cn/news/16861.html

相关文章:

  • deep research|从搜索引擎到搜索助手的实践(一)
  • 西门子PLC基础指令4:输出指令、立即输出指令
  • 【Bluetooth】【基础篇】第二章 关于蓝牙协议栈架构与其硬件方案架构大致概述
  • 12.Redis 主从复制
  • innoDB的buffer pool
  • 2025熵密杯 -- 初始谜题 -- Reproducibility
  • sqli-labs:Less-19关卡详细解析
  • 交互 Codeforces Round 1040 Interactive RBS
  • 网易云音乐硬刚腾讯系!起诉SM娱乐滥用市场支配地位
  • 联合索引全解析:一棵树,撑起查询的半边天
  • Anthropic:跨越生产效能拐点的AI增长飞轮
  • Linux学习--数据结构
  • 牛客 - 旋转数组的最小数字
  • MySQL 内置函数
  • Anthropic最新研究Persona vector人格向量
  • Python正则表达式使用指南:从基础到实战
  • 2025.8.2
  • VScode对Ubuntu用root账号进行SSH远程连接开发
  • 文心4.5开源测评:国产大模型的轻量化革命与全栈突破
  • 每日五个pyecharts可视化图表-bars(1)
  • SpringBoot启动项目详解
  • 详解Python标准库之命令行界面库
  • JavaScript特殊集合WeakMap 的使用及场景介绍
  • 未来交通:元宇宙技术重塑出行体验
  • SLAM中的非线性优化-2D图优化之零空间实战(十六)
  • Selenium自动化:轻松实现网页操控
  • 归并排序(简单讲解)
  • MySQL 基础
  • linux source命令使用详细介绍
  • 浅拷贝与深拷贝的区别