原型:

用法:#include 有些编译器需要#include
功能: 改变mem_address所指内存区域的大小为newsize长度。
说明: 如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
当内存不再使用时,应使用free()函数将内存块释放。
注意: 这里原始内存中的数据还是保持不变的。

详细说明及注意要点

1、如果有足够空间用于扩大mem_address指向的内存块,则分配额外内存,并返回mem_address
这里说的是“扩大”,我们知道,realloc是从堆上分配内存的,当扩大一块内存空间时, realloc()试图直接从堆上现存的数据后面的那些字节中获得附加的字节,如果能够满足,自然天下太平。也就是说,如果原先的内存大小后面还有足够的空闲空间用来分配,加上原来的空间大小= newsize。那么就ok。得到的是一块连续的内存。

2、如果原先的内存大小后面没有足够的空闲空间用来分配,那么从堆中另外找一块newsize大小的内存。
并把原来大小内存空间中的内容复制到newsize中。返回新的mem_address指针。(数据被移动了)。老块被放回堆上。 例如:

3、返回情况
返回的是一个void类型的指针,调用成功。(这就在你需要的时候进行强制类型转换)
返回NULL,当需要扩展的大小(第二个参数)为0并且第一个参数不为NULL,此时原内存变成了“freed(游离)”的了。
返回NULL,当没有足够的空间可供扩展的时候,此时,原内存空间的大小维持不变。

4、特殊情况
如果mem_address为null,则realloc()和malloc()类似。分配一个newsize的内存块,返回一个指向该内存块的指针。
如果newsize大小为0,那么释放mem_address指向的内存,并返回null。
如果没有足够可用的内存用来完成重新分配(扩大原来的内存块或者分配新的内存块),则返回null.而原来的内存块保持不变。

函数补充

都在stdlib.h函数库内,是C语言的标准内存分配函数。

※1.函数malloc()和calloc().

※2.主要区别.

※3.函数realloc

realloc可以对给定的指针所指的空间进行扩大或者缩小,无论是扩张或是缩小,原有内存的中内容将保持不变。当然,对于缩小,则被缩小的那一部分的内容会丢失。
※4.使用函数realloc注意事项
realloc 并不保证调整后的内存空间和原来的内存空间保持同一内存地址。相反,realloc 返回的指针很可能指向一个新的地址。所以在代码中,我们必须将realloc返回的值,重新赋值给 p :
p = (int *) realloc (p, sizeof(int) *15);
接着我们再就关于realloc函数说明进行补充:

函数定义:

上面的分析基本没有问题,但有两点要注意:
1.返回值可能与ptr的值不同,如果是不同的话,那么realloc函数完成后,ptr指向的旧内存已被free(释放)掉了。
2.如果返回NULL值,则分配不成功,而原来的ptr指向的内存还没有被free掉,要求程序显式free。故:

语句有这么一个问题,调用前p指向一个已分配成功的内存,而调用realloc时却失败(即返回NULL),此时,p原来指向的内存还没有free(释放)掉,而现在又找不到地址,这样就出现memory leak(即内存泄漏)了。

关于这一点的确要注意,最好如下:

安装遇到问题,可加老九君个人QQ:614940318,请备注来自CSDN
老九学堂免费C、C++、Java课程地址: https://study.163.com/courses-search?keyword=老九学堂

【老九学堂】【C语言进阶】内置函数补充相关推荐

  1. python内置函数面向对象_Pyhton——面向对象进阶二:类的内置函数补充、描述符...

    Pyhton--面向对象进阶二: 一.类的内置函数补充 1.isinstance(obj,cls)--检查obj是否是该类的对象 class Hoo: def __init__(self,name,t ...

  2. python 元类的call_python3 全栈开发 - 内置函数补充, 反射, 元类,__str__,__del__,exec,type,__call__方法...

    python3 全栈开发 - 内置函数补充, 反射, 元类,__str__,__del__,exec,type,__call__方法 一, 内置函数补充 1,isinstance(obj,cls)检查 ...

  3. delstr函数python_python3全栈开发-内置函数补充,反射,元类,__str__,__del__,exec,type,__call__方法详解...

    一.内置函数补充 1.isinstance(obj,cls)检查是否obj是否是类 cls 的对象 classFoo(object):passobj=Foo()print(isinstance(obj ...

  4. 面向对象进阶------内置函数 str repr new call 方法

    __new__方法: 我们来讲个非常非常重要的内置函数和init一样重要__new__其实在实例话对象的开始  是先继承父类中的new方法再执行init的  就好比你生孩子 先要把孩子生出来才能对孩子 ...

  5. learn_Day14 内置函数补充、反射、初识面向对象

    内置函数 __import__()用于导入模块 getattr 用于寻找模块的指定对象 a = __import__('b')  # b为模块名,b是字符串 ==>> 导入模块b并重新命名 ...

  6. 内置函数补充 之 反射

    getattr 反射 为什么要有反射? 当在设计一个页面访问的时候,通过用户输入相应的url,进入相应的页面,在用户输入的url地址不存在的时候,返回404错误. def run():inp = in ...

  7. python函数速查手册_Python进阶-内置函数大全

    #1.abs() 绝对值或复数的模abs(-1) >>> 1 #2.all() 接受一个迭代器,如果迭代器的所有元素都为真,那么返回True,否则返回Falseall([1,2,3] ...

  8. c语言内置函数大全,C语言——常用内置函数总结

    ctype.h 1.isalpha():测试一个字符是否为字母,是则返回1,否则返回0. 2.isdigit():测试一个字符是否为数字,是则返回1,否则返回0. 3.isupper():测试一个字符 ...

  9. Hive学习之路 (二十二)Hive 常用的内置函数(补充)

    hive 查看函数: show functions; desc functions 函数名 1.parse_url parse_url(url, partToExtract[, key]) - ext ...

最新文章

  1. 2022-2028年中国农副产品行业市场供需规模及未来前景分析报告
  2. tokenizer.encode() 与 tokenizer.tokenize()对比,言简意赅 转 高人讲学
  3. WEB学习-CSS盒模型
  4. 完成动态根据类别动态填充区域颜色
  5. 前端代码是怎样智能生成的?
  6. C语言——找出矩阵最大值
  7. CVPR 2021 | 超越卷积的自注意力模型,谷歌、UC伯克利提出HaloNet
  8. 渗透测试入门14之渗透测试工具1
  9. asp.net绑定checkboxlist--------jquery绑定click事件,获取checkbox的value和显示值
  10. 小迪和小捷的太空之旅——地球篇
  11. JVM常量池和八种基本数据及字符串
  12. Windows10从 微软商店 安装 linux(ubuntu)
  13. java餐饮系统需求总结,基于java的餐饮管理系统的设计与实现开题报告
  14. word给参考文献插入脚注
  15. 北京职工修改医保定点医院
  16. 【机器学习】PAC 学习理论
  17. windows消息机制
  18. ajax无法载入datagrid,easyui datagrid加载超时
  19. 征信衍生、信用卡数据场景如何做好分析,这一种时序特征方法得学学|金融信用分析师必学内容
  20. Ural1671 Anansi's Cobweb 并查集

热门文章

  1. echarts 饼状图 (数据为0或很小的扇形显示问题、扇形间隔)
  2. surface和华为平板_微软的Surface Duo是手机和平板电脑的完美融合
  3. 探索 nunustudio 开发3D模型 第二弹:根据矢量图制作动画效果
  4. autojs查找轮廓相似的图片
  5. Apache Spark RDD 论文(中文翻译)
  6. 第四课:股票,多数人的找死,少数人的等死
  7. 7个可以改变一生的自学网站,每天3小时,效果直线上升!
  8. 使用Jwt验证登录demo
  9. 利用Xshell映射云端服务器的visdom,进行训练过程可视化
  10. 门面设计模式(Facade Pattern)