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

关于realloc的行为方式,结合源码总结为:

1. realloc失败的时候,返回NULL;

2. realloc失败的时候,原来的内存不改变,也就是不free或不move,(这个地方很容易出错);

3. 假如原来的内存后面还有足够多剩余内存的话,realloc的内存=原来的内存+剩余内存,realloc还是返回原来内存的地址;

假如原来的内存后面没有足够多剩余内存的话,realloc将申请新的内存,然后把原来的内存数据拷贝到新内存里,原来的内存将被free掉,realloc返回新内存的地址;

4. 如果size为0,效果等同于free();

5. 传递给realloc的指针可以为空,等同于malloc;

6. 传递给realloc的指针必须是先前通过malloc(), calloc(), 或realloc()分配的。

#include

#include

int main()

{

char* p1 = 1;

char* p2 = 1;

char* p3 = 1;

char* p4 = 1;

char* p5 = 1;

p1 = (char*)malloc(10);

printf("1: p1 = %x

", p1);

p2 = (char*)malloc(0);

printf("2: p2 = %x

", p2);

p3 = (char*)malloc(10);

printf("3: p3 = %x

", p3);

p4 = realloc(p1, 20);

if(p4 != 0){

printf("4: p4 = %x

", p4);

printf("4: p1 = %x

", p1);

}else{

printf("4 f: p4 = %x

", p4);

printf("4 f: p1 = %x

", p1);

}

p5 = realloc(p3, 0);

if(1){

printf("5: p5 = %x

", p5);

printf("5: p3 = %x

", p3);

}

return 0;

}

/*

1: p1 = 20a00

2: p2 = 21008

3: p3 = 20a18

4: p4 = 21410

4: p1 = 20a00

5: p5 = 21018

5: p3 = 20a18

分析:

void *malloc(size_t size);

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

1. malloc(0)成功后,返回一个非0的地址值;

2.realloc(ptr,size)成功后,返回新的地址值;ptr会被free,但这个地址值不会改变。

因此,如果使用p2 = realloc(ptr, size2)的形式,在realloc成功后,应该手动使ptr = 0,避免野指针; 如果使用ptr = realloc(ptr, size2),则不需处理。

3.realloc失败后,ptr不受影响,不会被free。

*/

参考:

1. Linux Programmer's Manualhttp://www.man7.org/linux/man-pages/man3/malloc.3.html

2. 关于realloc的调整内存方式 http://blog.csdn.net/dadoneo/article/details/8688593

c 语言 realloc 源码,C语言,realloc相关推荐

  1. c语言strncpy源码,C语言 - strcpy和strncpy的编程实现及总结

    一.字符串的strcpy与strncpy函数 1.编程实现strcpy函数(笔试很容易考到) 要求: 原型:char *stpcpy(char *strDest,char *strSrc); 头文件: ...

  2. c语言迷宫源码,C语言迷宫源代码

    老师写的 #include #include #include /*定义几个功能按键*/ #define ESC 0x11b /*强行退出游戏*/ #define UP 0x4800 /*上下左右四个 ...

  3. c语言循环写回合制小游戏_【资源】60个C语言项目源码免费领取!

    序言 今天的资源特意是为大三.大四的童鞋准备的, 整理了一波有关于C语言开发的游戏.系统.效果.小项目的源码!!源码!!源码!! 小编之前发过一波毕业项目的资源, 还没有获取的伙伴,直接申请进群就能获 ...

  4. 超大气APP下载页双语多国语言网站源码

    介绍: 超大气APP下载页双语多国语言网站源码,自带4国语言源码,界面高端大气适合做软件下载页面! 解压下载修改下载链接,上传根目录即可使用! 网盘下载地址: http://kekewl.cc/NaX ...

  5. [iOS] 完整源码, Swift语言 - 账号保存工具

    代码地址如下: http://www.demodashi.com/demo/15017.html 1. 需求分析 作为一个开发者,平时肯定在各个平台,网站注册了各种账号:由于太多,很多时候都是注册之后 ...

  6. 阿里api网关接口客户端demo,java实现源码,其他语言可参考

    访问阿里api网关接口客户端demo,java实现源码,其他语言可参考 上一篇文章 <阿里api网关接口创建.发布.授权.调试> 中,介绍了3个典型接口的创建并在阿里控制台调试完成,地址: ...

  7. 扫雷c语言完整源代码,C语言扫雷源码

    C语言扫雷源码 #include #include #include #include /*鼠标信息宏定义*/ #define WAITING 0xff00 #define LEFTPRESS 0xf ...

  8. 会员管理系统源码 php语言开发

    会员管理系统源码 php语言开发 可用于美容店,理发店,服装店,美甲店,奢侈品店等等 功能介绍: 1.常用功能 会员登记,会员充值,会员充次,商品消费(会员),商品消费(散客),快速消费(会员),快速 ...

  9. C语言项目源码,C语言源码大全

    一.C语言源码大全 C语言是一门通用计算机编程语言,广泛应用于底层开发.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.尽管 ...

最新文章

  1. VTK:vtkChartMatrix用法实战
  2. oracle 数据库的数据事务的相关概念
  3. 王思聪吃热狗的c语言小程序,王思聪吃热狗火了,开发各种恶搞小程序!王校长:我不要面子的啊...
  4. 中国电信到美国的几条海缆线路图
  5. 求单链表的最大值与原地逆转_数据结构:单链表中求最大值的算法。
  6. Android设备中直接通过shell操作GPIO或者上层c服务直接操作GPIO
  7. php 字符串截掉前两位,如何在PHP的前20个单词中截断字符串?
  8. 关于 K8S 探针(startupProbe、livenessProbe、readinessProbe)的最佳实践
  9. PreferenceScreen1
  10. 最佳匹配问题-KM算法
  11. java lte cellid 如何获取_Android基站定位——通过手机信号获取基站信息(一)
  12. 苹果开发者账号登录的问题
  13. 小程序怎么清服务器缓存,怎么清理微信小程序缓存 微信小程序缓存删除的方法...
  14. 脉冲神经网络大致流程
  15. 【目标跟踪】帧差法结合卡尔曼滤波行人姿态识别【含GUI Matlab源码 1127期】
  16. Dr.Cleaner:清理磁盘和内存,深度卸载应用程序,监控CPU使用率和网络占用情况
  17. 常用java工具代码备忘
  18. Claude 免注册教程
  19. 如何通过服务器IP访问网页
  20. 安卓面试测试题复习专用 2019年版本个人收集

热门文章

  1. 如何打开linux内核选项APIC选项,非标准BIOS启动裁减后的Linux内核的一些问题?
  2. 比特币全节点(bitcoind) eth 全节点
  3. 盘一盘 synchronized (一)—— 从打印Java对象头说起
  4. mybatis No enum const class org.apache.ibatis.type.JdbcType.Integer
  5. sessionStorage与clone方法在项目中的应用
  6. leetcode-189. Rotate Array
  7. Qt程序等待/睡眠的正确方法
  8. ACM MM 2022 Call for Papers
  9. 深度学习精度提升 3 个小妙招:模型集成、知识蒸馏、自蒸馏
  10. ECCV 2020 论文大盘点-人脸技术篇