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

深耕C语言动态内存:realloc实战与数组求和综合练习

在C语言的学习旅程中,动态内存管理是绕不开的重要知识点,它让程序能够灵活应对不确定的内存需求。今天,我重点攻克了 realloc 函数的用法,并通过一个动态数组求和的综合习题,将 malloc 、 free 与 realloc 的知识点融会贯通,现将学习心得整理如下。

 

一、动态内存核心函数回顾

 

动态内存管理的核心是从堆区申请和释放空间,避免静态数组固定大小的局限性,常用函数包括:

 

-  malloc :用于申请指定大小的动态内存,返回 void* 指针,需强制转换为对应类型;

-  free :释放 malloc 、 realloc 申请的动态内存,避免内存泄漏;

-  realloc :调整已申请动态内存的大小,可实现扩容或缩容,是本次学习的重点。

 

二、realloc函数:动态内存的“伸缩术”

 

1. 函数原型与作用

 

 void* realloc(void* ptr, size_t size) ,其中 ptr 是原动态内存指针, size 是调整后的内存大小(字节数)。其核心作用是在原有内存基础上调整空间,若原内存后有足够连续空间,直接扩容;若没有,则重新申请新空间,复制原数据后释放旧空间。

 

2. 关键注意事项

 

- 必须用临时指针接收 realloc 的返回值,避免扩容失败(返回 NULL )时覆盖原指针,导致数据丢失;

- 若 ptr 为 NULL , realloc 等价于 malloc ;若 size 为0,等价于 free 。

 

3. 实操示例

 

以下代码实现了“申请5个int空间→赋值→扩容为10个int空间→输出”的流程:

int n = 5;

int* p = (int*)malloc(n * sizeof(int));

assert(p != NULL); // 断言检查内存申请是否成功

// 给初始内存赋值1-5

for (int i = 0; i < n; i++) {

    *(p + i) = i + 1;

}

// 扩容为原来的2倍(10个int)

int* ptr = NULL;

ptr = realloc(p, n * sizeof(int) * 2);

if (ptr != NULL) { // 确认扩容成功后更新原指针

    p = ptr;

    // 输出扩容后的所有元素(前5个为原数据,后5个为随机值)

    for (int i = 0; i < 2 * n; i++) {

        printf("%d ", *(p + i));

    }

}

free(p); // 释放内存

p = NULL; // 避免野指针

 

 

 

三、综合习题:动态数组求和

 

1. 题目需求

 

 

 

2. 完整代码

 

 

#include<stdlib.h>

#include<assert.h>

#include<stdio.h>

 

int main()

{

    int n = 0;

    printf("请输入数组大小n\n");

    scanf_s("%d", &n);

    // 申请n个int大小的动态内存

    int* p = (int*)malloc(n * sizeof(int));

    assert(p != NULL); // 断言检查,失败则终止程序

    if (p == NULL) { // 冗余检查,增强程序健壮性

        printf("分配内存失败\n");

        return -1;

    }

    // 接收用户输入的n个整数

    printf("请输入n个整数\n");

    for (int i = 0; i < n; i++) {

        scanf_s("%d", &p[i]);

    }

    // 计算数组总和

    int sum = 0;

    for (int i = 0; i < n; i++) {

        sum += *(p + i); // 等价于sum += p[i]

    }

    printf("该数组的和为 %d\n", sum);

    // 释放内存并置空指针

    free(p);

    p = NULL;

    return 0;

}

 

图例: 

 

3. 核心知识点应用

 

- 用 malloc 根据用户输入的 n 动态申请数组空间,突破静态数组的大小限制;

- 双重检查内存申请结果( assert + if ),确保程序稳定性;

- 用 free 释放内存并将指针置空,彻底避免内存泄漏和野指针问题。

 

四、今日学习总结

 

1.  realloc 的核心是“灵活调整内存大小”,务必用临时指针接收返回值,这是避免bug的关键;

2. 动态内存管理的“黄金法则”:申请必检查、扩容慎直接、用完必释放、释放后置空;

3. 综合习题让我深刻体会到,动态内存的价值在于“按需分配”,尤其适用于用户输入不确定的场景。

 

动态内存管理看似复杂,但只要掌握核心函数的用法和注意事项,就能让程序更灵活、高效。后续还需多做实操练习,熟练应对各种场景下的内存管理问题。

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

相关文章:

  • 网站建设 会议纪要网店运营的基本流程
  • 前端微前端应用加载策略,预加载与懒加载
  • 杭州滨江网站制作东莞网络公司招聘信息
  • 嘉兴网站建设低价推荐网站建设公司效果
  • HTTP , Websocket 和SSE三者的区别
  • 监控做斗鱼直播网站三水网站制作
  • 做百度网站需要多少钱网站维护知识
  • 掌握C语言:全局变量的完整生命周期
  • 网站架构设计师月薪多少缪斯设计
  • 网站建设用什么网站描述更改
  • 个人网站成功案例淘宝客网站备案号
  • 建站排行榜兰州网站seo
  • 怎么建设一个网站并顺利打开浏览信息网站建设
  • 易语言模块反编译工具 | 深入探讨易语言反编译技术及应用
  • 营销型网站制作建设怎样建设一个能上传数据的网站
  • 江门网站建设价格怎么在手机上自己开发软件
  • 宁波微信公众号开发公司seo网站首页优化排名怎么做
  • 运城网站建设哪个好关键词网站推广
  • 小白自己做网站网站建设的市场分析
  • 集合练习1
  • 苍南做网站哪里找深圳创业项目
  • 网站系统建设的主要意义离型剂技术支持东莞网站建设
  • 如何用rp做网站基于jsp的网上购物系统
  • 江门网站设计价格做贺卡网站
  • TOPS.FUN创新协议于2025年11月18日正式开启公测
  • 建设门户网站预算连云港网站建设价位
  • 免费个人自助建站苏州企业网站seo
  • 德保网站建设h5 和手机网站
  • Centos linux7 重置root密码
  • 前端微前端样式冲突,BEM命名规范