realloc 内存分配问题

如果指定内存比原来的要大,现在他重新他配了内存,原来的那块内存是不是删掉了?举个例子,谢谢.我问的是你说的那第三种情况中的第2种里的A):memblock大小和其后的自由... 如果指定内存比原来的要大,现在他重新他配了内存,原来的那块内存是不是删掉了?
举个例子,谢谢.
我问的是你说的那第三种情况中的第2种里的A):
memblock大小和其后的自由内存总和大于等于size
这时他返回新的内存地址,我相知道的是:原来的小的那块内存是不是释放了呀? 还是说在原来的基础上加内存?
展开
 我来答
郁_诗
2010-06-13 · TA获得超过494个赞
知道小有建树答主
回答量:155
采纳率:100%
帮助的人:211万
展开全部
对于楼主补充的问题的回答:如果是你说的那种情况,那么realloc是在原有内存的基础上进行扩充内存,返回的指针值与原先的指针是一样的。原先那块内存并没有释放。只有是2,b)的情况中才会有原先的内存被释放的情况。

呵呵!!! luzhiwei512总结的真好!
对于b)点补充下:
我们知道,realloc是从堆上分配内存的,当扩大一块内存空间时, realloc()试图直接从堆上现存的数据后面的那些字节中获得附加的字节,如果能够满足,自然天下太平;可如果数据后面的字节不够的话,问题就出来了,那么就使用堆上第一个有足够大小的自由块,现存的数据然后就被拷贝至新的位置,而老块则放回到堆上。

参考资料: http://www.moon-soft.com/doc/18826.htm

中智咨询
2024-08-28 广告
在当今竞争激烈的商业环境中,企业需要不断提高自身的竞争力,以保持市场份额和增加利润。通过人效提升,企业可以更有效地利用有限的资源,提高生产力和效益,从而实现盈利目标。中智咨询提供全方位的组织人效评价与诊断、人效提升方案等数据和管理咨询服务。... 点击进入详情页
本回答由中智咨询提供
匿名用户
2010-06-13
展开全部
是的,realloc()函数会释放原来的空间。

用另一个指针指向原来的地址,然后再用realloc()分配,之后再用“另一个指针”查看一下原来的地址保存的值(有时可能不会马上改变,因为原来的空间可能没有在释放后立刻被用作它途)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b79519e
2010-06-13 · TA获得超过3399个赞
知道大有可为答主
回答量:1417
采纳率:100%
帮助的人:1333万
展开全部
函数原型为:void *realloc(void *p,unsigned size);
功能是将p所指向的内存区域的大小改为size,size可以比原来分配的内存空间大或者小,返回值为指向该内存区的指针,或分配内存失败则返回NULL.....原来的那块内存没有删掉(即释放),如果比原来的大的话,应该是直接在原来的基础上扩充到size大小.....
例子:p=malloc(10) ; p1=realloc(p,20)
p,p1均为void类型的指针...
p为指向已分配内存的指针,将其大小增加为20,如果malloc,realloc函数执行成功的话,p和p1的值是一样的,即指向该内存区的首个内存单元....
如果不成功的话,就是楼上说的,返回NULL
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
luzhiwei512
2010-06-13 · TA获得超过386个赞
知道小有建树答主
回答量:407
采纳率:0%
帮助的人:358万
展开全部
void *realloc( void *memblock, size_t size );

一、如果memblock = 0, size != 0,表示为空指针分配空间,同malloc(memblock, size)
二、如果memblock != 0, size = 0,表示将已分配的空间释放,同free(memblock)
三、如果memblock != 0, size != 0,表示将已分配的空间重新分配,
1。如果size < memblock已分配内存大小,则将memblock的后部分切除,返回指针和memblock相等。
2。如果size > memblock已分配内存大小,
a)并且memblock大小和其后的自由内存总和大于等于size,则分配size大小的内存,返回指针和memblock相等。
b)如果memblock大小和其后的自由内存总和小于size,则在其他地方分配size大小的内存,返回指针和memblock不相等。如果其他地方也没有足够空间分配内存,则返回指针NULL。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式