使用remalloc的注意事项说明(必看篇)
发布时间 - 2026-01-11 00:24:02 点击率:次原型:extern void *realloc(void *mem_address, unsigned int newsize);

用法:#include <malloc.h>
功能:改变mem_address所指内存区域的大小为newsize长度。
说明:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。
下面再看MSDN中对realloc()函数的描述:
realloc returns a void pointer to the reallocated (and possibly moved) memory block. The return value is NULL if the size is zero and the buffer argument is not NULL, or if there is not enough available memory to expand the block to the given size. In the first case, the original block is freed. In the second, the original block is unchanged. The return value points to a storage space that is guaranteed to be suitably aligned for storage of any type of object. To get a pointer to a type other than void, use a type cast on the return value.
这段E文基本上是在讲realloc()的返回值的。realloc()函数的返回值是void *型的。
有下面三种情况:
1、返回void * 指针,调用成功。Void *型的指针指向新分配的内存空间。在需要的情况下可以再对这个指针进行强制类型转换,转换成你需要的类型的指针。如果传入的第一个指针参数为NULL,则该函数等同与malloc函数。
2、返回NULL,当需要扩展的大小(第二个参数)为0并且第一个参数不为NULL,此时原内存被“freed”掉了。
我们知道,realloc是从堆上分配内存的,当扩大一块内存空间时, realloc()试图直接从堆上现存的数据后面的那些字节中获得附加的字节,如果能够满足,自然天下太平;可如果数据后面的字节不够的话,那么就使用堆上第一个有足够大小的自由块,现存的数据然后就被拷贝至新的位置,而老块则放回到堆上。返回值指向新分配的内存地址。
由于在这其中可能会发生数据的移动,因此我们应该尽力避免下面的用法。
…………………………
#include <malloc.h> char *p,*q; p = (char * ) malloc (10); q=p; p = (char * ) realloc (p,20);
…………………………
在这种情况下,如果发生了数据的移动,p指向了新分配的内存地址,但是指针q还依然指向原先的内存地址,而原先的那部分内存已经在realloc函数中free掉了,因此指针q成了“野指针”,指向了一块未知的内存区域,这是很危险的。类似的,我们也应该尽量避免下面这种情况的使用。
…………………………
q = (char * ) realloc (p,20);
………………………
与第一种情况类似,如果发生了数据的移动,q指向了新分配的内存地址,而指针p还依然指向原先的内存地址,此时p成了野指针。如果不得以非得这样使用的话(估计这种情况是不存在的),我们也应该紧跟此后将指针p置为NULL。
…………………………
q = (char * ) realloc (p,20); p = NULL;
以上这篇使用remalloc的注意事项说明(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# remalloc
# 第一个
# 成了
# 返回值
# 给大家
# 掉了
# 这种情况
# 这是
# 发生了
# 是在
# 在这
# 天下太平
# 是从
# 这段
# 希望能
# 第二个
# 不存在
# 三种
# 不为
# 再看
# 后将
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
如何用PHP快速搭建CMS系统?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
企业网站制作这些问题要关注
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
Laravel Admin后台管理框架推荐_Laravel快速开发后台工具
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
用yum安装MySQLdb模块的步骤方法
网站制作价目表怎么做,珍爱网婚介费用多少?
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
浅析上传头像示例及其注意事项
如何在IIS中新建站点并配置端口与IP地址?
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
JavaScript Ajax实现异步通信
如何自定义建站之星模板颜色并下载新样式?
JavaScript实现Fly Bird小游戏
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】
Android okhttputils现在进度显示实例代码
如何挑选最适合建站的高性能VPS主机?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
LinuxShell函数封装方法_脚本复用设计思路【教程】
java中使用zxing批量生成二维码立牌
济南网站建设制作公司,室内设计网站一般都有哪些功能?
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
JS去除重复并统计数量的实现方法
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
Laravel如何实现API版本控制_Laravel版本化API设计方案
python中快速进行多个字符替换的方法小结
Python文件流缓冲机制_IO性能解析【教程】
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
WEB开发之注册页面验证码倒计时代码的实现
微信小程序 input输入框控件详解及实例(多种示例)
如何在橙子建站中快速调整背景颜色?
Internet Explorer官网直接进入 IE浏览器在线体验版网址
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
免费视频制作网站,更新又快又好的免费电影网站?
Firefox Developer Edition开发者版本入口
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
PHP正则匹配日期和时间(时间戳转换)的实例代码
如何用好域名打造高点击率的自主建站?
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
重庆市网站制作公司,重庆招聘网站哪个好?
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程

