资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

使用remalloc的注意事项有哪些-创新互联

这篇文章将为大家详细讲解有关使用remalloc的注意事项有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

创新互联于2013年开始,是专业互联网技术服务公司,拥有项目成都网站制作、网站设计、外贸网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元工农做网站,已为上家服务,为工农各地企业和个人服务,联系电话:18980820575

原型: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 

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的注意事项有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


新闻标题:使用remalloc的注意事项有哪些-创新互联
当前链接:http://cdkjz.cn/article/hsjcc.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220