• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

crealloc函数和malloc函数

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

realloc 
原型:extern void *realloc(void *mem_address, unsigned int newsize); 
用法:#include <stdlib.h> 有些编译器需要#include <alloc.h> 在C++环境中,使用#include<iostream> using namespace std;
功能:改变mem_address所指内存区域的大小为newsize长度。 
说明:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。 
当内存不再使用时,应使用free()函数将内存块释放。 
注意:这里原始内存中的数据还是保持不变的。

举例如下:

int *a1=(int*)malloc(2*sizeof(int));
a1[0]=2;
a1[1]=3;
cout<<(int*)a1<<endl;
a1=(int *)realloc(a1,4*sizeof(int));
cout<<(int*)a1<<endl;
a1[2]=4;
a1[3]=5;
for(int i=0;i<=3;i++)
cout<<a1[i]<<endl;

运行结果:

00672DF0

00672DF0

2

3

4

5

详细说明及注意要点: 
1、如果有足够空间用于扩大mem_address指向的内存块,则分配额外内存,并返回mem_address 
这里说的是“扩大”,我们知道,realloc是从堆上分配内存的,当扩大一块内存空间时, realloc()试图直接从堆上现存的数据后面的那些字节中获得附加的字节,如果能够满足,自然天下太平。也就是说,如果原先的内存大小后面还有足够的空闲空间用来分配,加上原来的空间大小= newsize。那么就ok。得到的是一块连续的内存。 
2、如果原先的内存大小后面没有足够的空闲空间用来分配,那么从堆中另外找一块newsize大小的内存。 
并把原来大小内存空间中的内容复制到newsize中。返回新的mem_address指针。(数据被移动了)。 
老块被放回堆上。 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#中跨线程操作控件发布时间:2022-07-13
下一篇:
oracle大数据匹配处理C#发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap