介绍realloc函数
malloc函数用于改变malloc申请的空间大小,即可以进行放大和缩容,从而对空间进行合理应用
realloc调用方法
realloc基本语法
里面的str为指向用malloc开辟的空间的首地址,10,为新空间的大小,而str1为指向新空间首地址的指针
realloc的基本调用方法
如图,即可完成有关realloc的基本调用
需要注意的是
malloc和realloc都存在无法开辟空间导致指针指向NULL的情况
所以在调用完函数后要增加限制条件
判断是否函数成功开辟空间
VS2022也会有警告
realloc在无法开辟空间的时候
这个时候realloc则会返回一个空地址
并且原来的数组空间并不会发生变化
此时直接使用原来的指针即可
realloc的空间储存方式
realloc的储存方式分两种
一种为直接在原有的空间后面进行扩容
(这种情况的条件为原来的空间后面有足够的空间来扩大)
另外一种为调用malloc函数开辟一处新空间
将原有数据转移过去并将原地址free掉
这里其他博主已经进行了详细的介绍
不理解的可以看Nytrogen的realloc函数用法解释
realloc在缩容时的思考
realloc缩容的空间如果比原来的数据小
那么数据的空间变化采用是哪种方式
是将原有的空间直接砍掉
还是新开辟一处空间
我通过代码简单检验了一下
很显然
结果的地址并不一样
所以可得在缩进时开辟了一处新的空间作为载体
值得一提的是
在新空间装满时
realloc就会停止转移
因为我最后free了str1
如果我的堆区因为realloc数据溢出了
在运行时return 0就会报警
所以可得
realloc在缩进时并不会导致堆区数据溢出
但同时如果数据缺失也不会报警
在缩进时一定要查看缩小后的空间大小与原数据的空间大小
以免造成数据缺失
谢谢大家观看
点一个免费的赞吧,谢谢