realloc(void *__ptr, size_t __size):更改已经配置的内存空间,即更改由malloc()函数分配的内存空间的大小。

如果将分配的内存减少,realloc仅仅是改变索引的信息。

如果是将分配的内存扩大,则有以下情况:
1)如果当前内存段后面有需要的内存空间,则直接扩展这段内存空间,realloc()将返回原指针。
2)如果当前内存段后面的空闲字节不够,那么就使用堆中的第一个能够满足这一要求的内存块,将目前的数据复制到新的位置,并将原来的数据块释放掉,返回新的内存块位置。
3)如果申请失败,将返回NULL,此时,原来的指针仍然有效。

注意:如果调用成功,不管当前内存段后面的空闲空间是否满足要求,都会释放掉原来的指针,重新返回一个指针,虽然返回的指针有可能和原来的指针一样,即不能再次释放掉原来的指针。

看一下示例代码

#include"stdio.h"
#include"malloc.h"int main(){int *p1,*p2 = NULL;int n;p1 = (int *)malloc(5 * sizeof(int));  // 分配内存p2 = p1;for(int i=0;i<5;i++)*p2++ = i;printf("分配新内存之前:%u\n",p1);printf("再分配新的内存:\n");scanf("%d",&n); p1 = (int *)realloc(p1, n*sizeof(int));if(p1 == NULL)printf("分配内存失败\n");p2 = p1;printf("分配新内存之后:%u",p1);return 0;
}

如果当前内存段后有足够的空间,realloc()返回原来的指针:

分配新内存之前:4815344
再分配新的内存:
99
分配新内存之后:4815344
--------------------------------
如果当前内存段后没有足够的空间,realloc()返回一个新的内存段的指针:

分配新内存之前:3308016
再分配新的内存:
1000
分配新内存之后:7763488
--------------------------------

c: realloc()函数解析相关推荐

  1. c语言中realloc()函数解析

    http://blog.csdn.net/hackerain/article/details/7954006 realloc(void *__ptr, size_t __size):更改已经配置的内存 ...

  2. C/C++ realloc()函数解析

    真是有点惭愧,这些内容本应该很早就掌握的,以前只是糊里糊涂的用,不知道在内存中具体是怎么回事,现在才弄清楚. realloc(void *__ptr, size_t __size):更改已经配置的内存 ...

  3. 【C语言】realloc函数

    前言:在C/C++的学习过程当中一定一定要多刷题,牛客网作为国内内容超级丰富的IT题库,尤其是它的C.C++,有从入门到大厂真题,而且大部分的考试题目也是从中抽取,还有很多面经,推荐大家去牛客网进行刷 ...

  4. oracle rpad mysql_Oracle生成不重复票号与LPAD,RPAD与NEXTVAL函数解析

    SELECT TO_CHAR(SYSDATE,'YYMMDD')||LPAD(REFUNDSEQ.NEXTVAL,6,'0') AS RES_ORDER_NO FROM DUAL 该语句拼接 时间 与 ...

  5. json数据解析_VBA 实践指南 -- Split函数解析Json数据

    什么是JSON? JSON(JavaScript Object Notation) 是一种及其轻量级的数据交换格式,它是 ECMAScript (欧洲计算机协会制定的JavaScript规范)的一个子 ...

  6. C中堆管理—浅谈malloc,free,calloc,realloc函数之间的区别

    2019独角兽企业重金招聘Python工程师标准>>> 在进行C/C++编程的时候,需要程序员对内存的了解比较好清楚,经常需要操作的内存可分为下面几个类别: 堆栈区(stack):由 ...

  7. C/C++ sizeof函数解析——解决sizeof求结构体大小的问题

    C/C++ sizeof函数解析--解决sizeof求结构体大小的问题 参考文章: (1)C/C++ sizeof函数解析--解决sizeof求结构体大小的问题 (2)https://www.cnbl ...

  8. realloc函数引发的慘案

    帮别人调试个程序,程序的功能主要涉及动态数组.实现动态数组元素的加入,删除,查找.显示功能.可是在运行加入功能的时候,连续运行三次加入的时候就会出现故障,让人感到很的莫名其妙. 涉及到的函数例如以下所 ...

  9. realloc函数在使用上要注意什么问题

    realloc函数在使用上要注意什么问题 这个函数的作用是重新分配空间大小,返回的头指针不变,只是改变空间大小.既然是改变,就有变大.变小和为什么改变的问题.变大,要注意不能大到内存溢出:变小,那变小 ...

最新文章

  1. 主元素问题 Majority Element
  2. iptables基础——链与表
  3. 演讲实录丨清华大学朱小燕教授:对话系统现状与展望
  4. java读取指定package下的所有class
  5. ASP.NET Core Filter与IOC的羁绊
  6. IIS环境下ShopEx伪静态配置【图文教程+视频教程】
  7. 刘海、水滴、挖孔都靠边!中兴吐槽:不配全面屏
  8. pg_restore - 从一个由 pg_dump 创建的备份文件中恢复 PostgreSQL 数据库。
  9. Android 四种启动模式
  10. 力扣题目算法分类【持续更新】
  11. 摄像模组中光学相关知识(四)
  12. HenCoder Android开发进阶系列学习笔记
  13. 棋牌游戏定时器模块设计
  14. DDD中的领域拆分和合并
  15. 为什么说c语言是关键字,为什么说C语言既有高级语言又有低级语言的特点
  16. 无线电波的波段划分和应用
  17. Java获取不到tfp目录内容_AndroidRuntime引起:java.lang.unsatisfiedLinkError:无法加载tfp_jni:findLibrary返回null...
  18. 【目标检测】YOLOv3:An Incremental Improvement
  19. iphone屏幕镜像如何全屏_手机投屏到电视的照片如何全屏显示?
  20. matlab蚁群算法解决vrp过程,蚁群算法MATLAB解VRP问题

热门文章

  1. Thread 小总结
  2. GO语言中json与map的转换
  3. Item 14: 如果函数不会抛出异常就把它们声明为noexcept
  4. HDU-2094 产生冠军
  5. (转)asp和asp.net区别
  6. linux(2)- 共享内存的实现
  7. ASP.NET购物车Cookie获取,创建,添加,更新,删除的用法
  8. 关于Java中next() nextLine()的区别
  9. bootstrap中点击左边展开
  10. jaxb和dozer简介