全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

使用remalloc的注意事项说明(必看篇)

原型: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  # 第一个  # 成了  # 返回值  # 给大家  # 掉了  # 这种情况  # 这是  # 发生了  # 是在  # 在这  # 天下太平  # 是从  # 这段  # 希望能  # 第二个  # 不存在  # 三种  # 不为  # 再看  # 后将 


相关文章: 详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  股票网站制作软件,网上股票怎么开户?  广东企业建站网站优化与SEO营销核心策略指南  建站之星免费模板:自助建站系统与智能响应式一键生成  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  大型企业网站制作流程,做网站需要注册公司吗?  css网站制作参考文献有哪些,易聊怎么注册?  SQL查询语句优化的实用方法总结  非常酷的网站设计制作软件,酷培ai教育官方网站?  网站制作服务平台,有什么网站可以发布本地服务信息?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  建站主机服务器选购指南:轻量应用与VPS配置解析  高端智能建站公司优选:品牌定制与SEO优化一站式服务  如何正确下载安装西数主机建站助手?  如何在建站之星网店版论坛获取技术支持?  如何挑选高效建站主机与优质域名?  如何在万网自助建站中设置域名及备案?  建站VPS能否同时实现高效与安全翻墙?  如何在万网ECS上快速搭建专属网站?  郑州企业网站制作公司,郑州招聘网站有哪些?  制作网站外包平台,自动化接单网站有哪些?  如何构建满足综合性能需求的优质建站方案?  个人摄影网站制作流程,摄影爱好者都去什么网站?  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  如何在局域网内绑定自建网站域名?  网站专业制作公司有哪些,做一个公司网站要多少钱?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  如何在IIS7中新建站点?详细步骤解析  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  如何确保西部建站助手FTP传输的安全性?  如何零成本快速生成个人自助网站?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  如何通过.red域名打造高辨识度品牌网站?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  如何用5美元大硬盘VPS安全高效搭建个人网站?  如何在阿里云虚拟服务器快速搭建网站?  活动邀请函制作网站有哪些,活动邀请函文案?  建站之星伪静态规则如何正确配置?  linux top下的 minerd 木马清除方法  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  如何挑选最适合建站的高性能VPS主机?  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  盘锦网站制作公司,盘锦大洼有多少5G网站?  网站好制作吗知乎,网站开发好学吗?有什么技巧?  如何做网站制作流程,*游戏网站怎么搭建?  javascript中的try catch异常捕获机制用法分析  如何通过西部建站助手安装IIS服务器? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。