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

realloc用法

realloc 函数原型:

c

void *realloc(void *ptr, size_t new_size);

realloc 的三种工作方式:

1. 原地扩容(最佳情况)

c

int *arr = malloc(100);        // 分配100字节
int *new_arr = realloc(arr, 200);  // 扩展到200字节
// 如果new_arr == arr,说明在原地扩展成功
  • 条件:原内存块后面有足够的空闲空间

  • 效果:直接扩展,数据保持原位,性能最好

  • 数据:全部保留在原位置

2. 异地搬迁(常见情况)

c

int *arr = malloc(100);
int *new_arr = realloc(arr, 200);
// 如果new_arr != arr,说明搬到了新地址
  • 条件:原内存块后面空间不足

  • 过程

    1. 在别处分配新的更大内存块

    2. 把原数据完整复制到新位置

    3. 自动释放原内存块

  • 数据:全部复制到新位置,保持完整

3. 分配失败

c

int *arr = malloc(100);
int *new_arr = realloc(arr, VERY_LARGE_SIZE);
if (new_arr == NULL) {// 扩容失败,但arr仍然有效!// 需要手动管理原内存
}
  • 条件:内存不足,无法分配新空间

  • 效果:返回NULL,原内存块保持不变

  • 数据:全部保留在原位置

重要特性总结:

情况返回值原指针原数据需要手动free原指针?
原地扩容新地址=原地址失效保持原位不需要
异地搬迁新地址≠原地址失效复制到新位置不需要
分配失败NULL仍然有效保持原位需要

正确用法示例:

c

int *arr = malloc(10 * sizeof(int));
// ... 使用arr// 扩容
int *new_arr = realloc(arr, 20 * sizeof(int));
if (new_arr == NULL) {// 扩容失败,但arr还能用free(arr);  // 如果不需要原数据return ERROR;
} else {arr = new_arr;  // 更新指针// 不需要free原arr,realloc已自动处理
}

http://www.dtcms.com/a/557463.html

相关文章:

  • 智慧团建网站登录电脑版装饰工程有限公司的经营范围
  • STM32学习(MCU控制)(SPI and Flash 存储)
  • 网站推广有哪些方案pr免费模板网站
  • 轻量级HTTPSocks代理GOST: Linux编译安装
  • 有没有教做健身餐的网站wordpress菜单跳转
  • 以小白视角尝试 WPF / WinUI3 / MAUI / MAUI Blazor 构建 Windows 桌面程序
  • 网络原理-进阶
  • 百度搜索什么关键词能搜到网站大学生创新创业网站建设内容
  • c++muduo库--HttpRequest类
  • 分析网站的关键词唐山做网站公司哪家好
  • 基于MATLAB的雷达信号传播路径损耗仿真
  • cfu相关镜像
  • 关于网站建设的一些事韩雪冬网站设计
  • 如果做网站有做教育行业的招聘网站吗
  • 56.合并区间
  • 卡尔曼滤波算法原理详解:核心公式、C 语言代码实现及电机控制 / 目标追踪应用
  • 互联网创业项目整合网站创建一个公司需要什么
  • 便宜的网站设计企业重庆医院门户网站建设
  • 做网站要会那些ps公司核名查询官网
  • YAML 配置文件格式
  • Linux网络--网络基础概念
  • 网站没有内容 能做优化吗新网站关键词怎么优化
  • Arbess实践指南(1) - 使用Arbess+gitee+sourcefare实现Java项目自动化部署及代码扫描
  • 《系统规划与管理师教程(第2版)》方法篇-第7章 网络环境规划 知识点总结
  • 萧县哪有做网站的制作网站民治
  • 力扣2517. 礼盒的最大甜蜜度
  • 哪个网站可以直接做ppt简单网页模板
  • 福州网站建设托管个人网站设计成品下载
  • Android WebView 从入门到最佳实践
  • 青岛公路建设集团有限公司网站好乐买网站推广方式