【老九学堂】【C语言进阶】内置函数补充
原型:
用法:#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语言进阶】内置函数补充相关推荐
- python内置函数面向对象_Pyhton——面向对象进阶二:类的内置函数补充、描述符...
Pyhton--面向对象进阶二: 一.类的内置函数补充 1.isinstance(obj,cls)--检查obj是否是该类的对象 class Hoo: def __init__(self,name,t ...
- python 元类的call_python3 全栈开发 - 内置函数补充, 反射, 元类,__str__,__del__,exec,type,__call__方法...
python3 全栈开发 - 内置函数补充, 反射, 元类,__str__,__del__,exec,type,__call__方法 一, 内置函数补充 1,isinstance(obj,cls)检查 ...
- delstr函数python_python3全栈开发-内置函数补充,反射,元类,__str__,__del__,exec,type,__call__方法详解...
一.内置函数补充 1.isinstance(obj,cls)检查是否obj是否是类 cls 的对象 classFoo(object):passobj=Foo()print(isinstance(obj ...
- 面向对象进阶------内置函数 str repr new call 方法
__new__方法: 我们来讲个非常非常重要的内置函数和init一样重要__new__其实在实例话对象的开始 是先继承父类中的new方法再执行init的 就好比你生孩子 先要把孩子生出来才能对孩子 ...
- learn_Day14 内置函数补充、反射、初识面向对象
内置函数 __import__()用于导入模块 getattr 用于寻找模块的指定对象 a = __import__('b') # b为模块名,b是字符串 ==>> 导入模块b并重新命名 ...
- 内置函数补充 之 反射
getattr 反射 为什么要有反射? 当在设计一个页面访问的时候,通过用户输入相应的url,进入相应的页面,在用户输入的url地址不存在的时候,返回404错误. def run():inp = in ...
- python函数速查手册_Python进阶-内置函数大全
#1.abs() 绝对值或复数的模abs(-1) >>> 1 #2.all() 接受一个迭代器,如果迭代器的所有元素都为真,那么返回True,否则返回Falseall([1,2,3] ...
- c语言内置函数大全,C语言——常用内置函数总结
ctype.h 1.isalpha():测试一个字符是否为字母,是则返回1,否则返回0. 2.isdigit():测试一个字符是否为数字,是则返回1,否则返回0. 3.isupper():测试一个字符 ...
- Hive学习之路 (二十二)Hive 常用的内置函数(补充)
hive 查看函数: show functions; desc functions 函数名 1.parse_url parse_url(url, partToExtract[, key]) - ext ...
最新文章
- 2022-2028年中国农副产品行业市场供需规模及未来前景分析报告
- tokenizer.encode() 与 tokenizer.tokenize()对比,言简意赅 转 高人讲学
- WEB学习-CSS盒模型
- 完成动态根据类别动态填充区域颜色
- 前端代码是怎样智能生成的?
- C语言——找出矩阵最大值
- CVPR 2021 | 超越卷积的自注意力模型,谷歌、UC伯克利提出HaloNet
- 渗透测试入门14之渗透测试工具1
- asp.net绑定checkboxlist--------jquery绑定click事件,获取checkbox的value和显示值
- 小迪和小捷的太空之旅——地球篇
- JVM常量池和八种基本数据及字符串
- Windows10从 微软商店 安装 linux(ubuntu)
- java餐饮系统需求总结,基于java的餐饮管理系统的设计与实现开题报告
- word给参考文献插入脚注
- 北京职工修改医保定点医院
- 【机器学习】PAC 学习理论
- windows消息机制
- ajax无法载入datagrid,easyui datagrid加载超时
- 征信衍生、信用卡数据场景如何做好分析,这一种时序特征方法得学学|金融信用分析师必学内容
- Ural1671 Anansi's Cobweb 并查集