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 <stdio.h>
#include <stdlib.h>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\n", p1);p2 = (char*)malloc(0);printf("2: p2 = %x\n", p2);p3 = (char*)malloc(10);printf("3: p3 = %x\n", p3);p4 = realloc(p1, 20);if(p4 != 0){printf("4: p4 = %x\n", p4);printf("4: p1 = %x\n", p1);}else{printf("4 f: p4 = %x\n", p4);printf("4 f: p1 = %x\n", p1);}p5 = realloc(p3, 0);if(1){printf("5: p5 = %x\n", p5);printf("5: p3 = %x\n", 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 Manual   http://www.man7.org/linux/man-pages/man3/malloc.3.html2. 关于realloc的调整内存方式 http://blog.csdn.net/dadoneo/article/details/8688593

C语言,realloc相关推荐

  1. c语言代码re通常什么错误,求帮助 C语言realloc和free触发断点的问题

    LZ目前自学C语言  在写小程序的时候遇到一些问题  请各位大神赐教一下 非常感谢 关联问题1:realloc触发断点问题 描述:LZ想要通过realloc实现动态数组 结果发现程序运行在reallo ...

  2. 安全起见,小心使用C语言realloc()函数

    在C语言中,良好的编程习惯要求一个函数只做一件事,如果一个函数实现了若干功能,可以说基本是一个糟糕的设计. C语言 realloc() 函数位于 stdlib.h 头文件中,其原型为:     voi ...

  3. c语言realloc函数中写啥,求大神解惑realloc函数,谢谢!

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include void f(int * q,int i) { int j; for(j=0;j scanf("%d&quo ...

  4. C语言 realloc函数 带着内存游走的函数

    realloc函数 realloc函数,带着内存游走的函数. 该函数将 ptr 指向的内存大小修改为size.内存中的数据从开头到size保留不变. 如果size大于原内存大小,则多出的部分会被初始化 ...

  5. c 语言 realloc 源码,C语言,realloc

    void * realloc ( void * ptr, size_t new_size ); 关于realloc的行为方式,结合源码总结为: 1. realloc失败的时候,返回NULL: 2. r ...

  6. 关于vector的迭代器失效的问题

    使用vector需谨慎!尤其是还没有清楚vector的实现原理的时候! 头文件<vector>中对于失效的检测方式,定义是这样的: 当erase了vector中的一个元素后,不能保证原先指 ...

  7. C语言 利用malloc()和realloc()动态分配内存

    1. C语言定义1个数组的时候, 必须同时指定它的长度. 例如: int a[5]={1,2,3,4,5}; //合法 int b[6]; //合法int c[]; //错误 因为没有指定长度 但是下 ...

  8. C语言增量内存申请 realloc

    C语言增量内存申请 realloc void* realloc (void* ptr, size_t size); Reallocate memory block Changes the size o ...

  9. C语言之内存管理初探:栈和堆、malloc、calloc、realloc、free

    一. 进程空间 二.进程空间图示   程序被加载到内存以后,0-4G的内存空间.这0-4G内存中的布局如下图: 三. 栈内存 1.栈存储的特点:   栈的大小并不大,他的意义并不在于存储大数据,而在于 ...

  10. C语言动态内存开辟详解(malloc,calloc,realloc,free,柔型数组)

    目录 一.概述 二.相关库函数的使用 1.malloc 2.calloc malloc vs. calloc 异同 3.free的使用 4.realloc 三.易错点 四.C\C++程序的内存开辟规则 ...

最新文章

  1. iOS - 实现映客首页 TabBar 和滑动隐藏 NavBar 和 TabBar
  2. ionic4 select 去掉确定取消按钮_word文档中的水印如何去掉,有三种方法,你最喜欢哪种?...
  3. SQL Server数据库表锁定原理以及如何解除表的锁定转
  4. 15张Vim速查表-帮你提高N倍效率
  5. SQLIntegrityConstraintViolationException: 异常解决
  6. (转载)经典SQL语句大全3-技巧篇
  7. 联想预装office2019_【联想电脑专属福利】超详细图文教程,手把手教你免费激活正版Office...
  8. gif动态图片生成器,多张图片组合后生成动图...
  9. ReentrantLock原理及AQS(羊群效应+实操)
  10. SEO入门学习:关键词密度和布局
  11. 这家机场扶梯安装“智能管家”,扶梯消毒仪现高招,绝了!
  12. python词云分析难吗_【python数据挖掘】使用词云分析来分析豆瓣影评数据
  13. DELL R730xd 安装PCIE SSD 后风扇转速增高的解决方案
  14. vtk 的vtkimagereslice实现三视图的显示
  15. 3dmax2014植树插件_3DsMax种树插件:ForestPack Pro v6.1.2 For 2015-2019 updated Libraries
  16. 绝缘栅型n沟道场管_N沟道增强型绝缘栅场效应管的工作原理
  17. 创建父需求子需求构建需求树_用pc构建DIY计算集群(超级计算机)
  18. 视频分割怎么使用?别担心,好用方法来啦
  19. “洋记者”眼中的中国航天员:永不放弃的梦想
  20. 人工智能的妙用:谷歌公布图像字幕技术

热门文章

  1. linux 挂载raid_linux下做raid
  2. 信道容量受哪三个要素_好的餐饮店门头招牌应该怎么设计呢?需要具备哪些要素?...
  3. windows service 2008 R2 升级 sp1遇到的问题
  4. python 类装饰_神坑 Python 装饰类无限递归
  5. python字符串的删除操作_学习快人一步|python中常见的27个字符串操作
  6. Python算法实现 -- K最短路径算法
  7. java collection_【基础篇】java-Collection集合-List和Set
  8. MySQL 聚合函数以及 优先级
  9. 一种低侵入性的组件化方案 之 组件化需要考虑的几个问题
  10. 四种模式、五大架构 规划企业物联网蓝图