news 2026/10/15 4:36:42

realloc和malloc区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
realloc和malloc区别

一句话区别

  • malloc:新建一块堆内存,只负责分配,不能修改已经分配好的内存大小
  • realloc:重新调整一块已经存在的堆内存大小(扩大、缩小都可以)

1. 函数原型

// 分配 size 字节,返回起始地址,内容初始是随机脏数据 void *malloc(size_t size); // 调整 ptr 指向内存块为 size 字节 void *realloc(void *ptr, size_t size);

2. 详细对比

malloc

  1. 输入:需要的字节数size
  2. 作用:在堆上开辟全新内存
  3. 如果分配成功:返回内存首地址;失败返回NULL
  4. 不会保留任何旧数据,新内存里是随机值
  5. malloc(0)行为是未定义/由平台决定,尽量不要写

realloc

realloc(ptr, new_size)分几种情况:

  1. ptr == NULL:等价于malloc(new_size),分配新内存
realloc(NULL, 100) == malloc(100);
  1. new_size == 0:等价于free(ptr)(不同平台有差异,不推荐这么释放)
  2. 原有内存块后面有足够空闲空间:原地扩容,返回原来的 ptr,原有数据保留
  3. 后面空间不够:在堆别的地方找一块符合大小的新内存,把旧内存的数据拷贝过去,然后自动 free 旧内存,返回新地址
  4. 分配失败:返回NULL,原来那块内存不会被 free,还能用!

⚠️ 经典坑:不要直接ptr = realloc(ptr, newsize);

如果失败返回 NULL,你原来的 ptr 直接丢了 → 内存泄漏!

正确写法:

void *tmp = realloc(ptr, new_size); if (tmp != NULL) { ptr = tmp; }

3. 对比表格

特性mallocrealloc
功能分配新堆内存修改已有堆内存大小(扩容/缩容)
参数只有目标大小旧内存指针 + 新大小
旧数据无,新内存脏数据保留原来的数据
是否自动 free 旧内存不会搬迁扩容时自动 free 旧块
输入 NULL不支持(分配新内存)等价 malloc

4. 补充:calloc

顺带一提(经常一起问)

void *calloc(size_t nmemb, size_t size);

分配nmemb * size字节,并且全部初始化为 0。

malloc 不初始化、calloc 清零。

5. 简单示例

// malloc 分配 int *p = malloc(5 * sizeof(int)); // realloc 扩容到 10 个 int int *tmp = realloc(p, 10 * sizeof(int)); if (tmp) { p = tmp; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 4:36:13

IEEE论文投稿格式全攻略:模板选用、公式图表与自查清单

简介:IEEE Transactions 系列是 IEEE 旗下最具权威性的学术期刊集群之一,其论文格式要求细致且严格。这份模板源自 IEEE 官网,提供了 2021 年版本的完整投稿格式规范,适合准备向 Transactions、Journals 或 Letters 投稿的科研人员…

作者头像 李华
网站建设 2026/10/15 4:36:13

MFC函数地址相同之谜:MSVC链接器ICF优化详解

说实话,第一次在调试器里看到两个函数地址完全一样的时候,我第一反应是“乱套了”。明明是两个不同名字的MFC消息处理函数,代码逻辑也各自写了属于自己的分支,怎么取地址对比下来结果是同一个入口?后来冷静下来翻了半天…

作者头像 李华
网站建设 2026/10/15 4:36:08

Simulink中MPSK系统仿真:从调制链路搭建到误码率分析

简介:这是一份Simulink的MPSK系统仿真实验报告,主要面向通信工程、电子信息等专业学生,用于掌握MATLAB Simulink通信系统建模方法,理解MPSK调制解调原理及不同进制下的性能差异。压缩包内含1个Word格式的doc文档,大小约…

作者头像 李华
网站建设 2026/10/15 4:35:32

CTF入门术语全解析:从Flag到PWN,一次讲清夺旗赛黑话

做了几年CTF,带过不少新人入坑,我发现一个特别明显的现象:很多第一次接触CTF的同学,不是被题目难倒的,而是被圈内说话方式绕晕的。群里有人问“这题是不是直接G”,你往下翻半天才看懂;打开一篇W…

作者头像 李华
网站建设 2026/10/15 4:35:32

DDS波形发生器全链路设计:从频率控制字到负载匹配

简介:全国电子设计大赛波形发生器设计完整课程设计文档,面向电子类本专科生、参赛队伍及需完成类似课题的设计者,围绕计算机与DAC0832构成信号发生器的选型与实现展开。压缩包内为单个doc文档,大小约496KB,内容涵盖方案…

作者头像 李华
网站建设 2026/10/15 4:35:17

Spring Boot应急物资管理系统开发实战:库存批次与预警机制设计

1. 项目概述与需求拆解1.1 应急物资管理系统到底要解决什么问题如果你接了一个“基于Spring Boot的应急物资管理系统”的毕业设计课题,或者在工作中被要求做类似的模块,先别急着写代码,把需求吃透比什么都重要。这个系统的核心管理对象就是应…

作者头像 李华