realloc 内存分配问题
如果指定内存比原来的要大,现在他重新他配了内存,原来的那块内存是不是删掉了?举个例子,谢谢.我问的是你说的那第三种情况中的第2种里的A):memblock大小和其后的自由...
如果指定内存比原来的要大,现在他重新他配了内存,原来的那块内存是不是删掉了?
举个例子,谢谢.
我问的是你说的那第三种情况中的第2种里的A):
memblock大小和其后的自由内存总和大于等于size
这时他返回新的内存地址,我相知道的是:原来的小的那块内存是不是释放了呀? 还是说在原来的基础上加内存? 展开
举个例子,谢谢.
我问的是你说的那第三种情况中的第2种里的A):
memblock大小和其后的自由内存总和大于等于size
这时他返回新的内存地址,我相知道的是:原来的小的那块内存是不是释放了呀? 还是说在原来的基础上加内存? 展开
4个回答
展开全部
对于楼主补充的问题的回答:如果是你说的那种情况,那么realloc是在原有内存的基础上进行扩充内存,返回的指针值与原先的指针是一样的。原先那块内存并没有释放。只有是2,b)的情况中才会有原先的内存被释放的情况。
呵呵!!! luzhiwei512总结的真好!
对于b)点补充下:
我们知道,realloc是从堆上分配内存的,当扩大一块内存空间时, realloc()试图直接从堆上现存的数据后面的那些字节中获得附加的字节,如果能够满足,自然天下太平;可如果数据后面的字节不够的话,问题就出来了,那么就使用堆上第一个有足够大小的自由块,现存的数据然后就被拷贝至新的位置,而老块则放回到堆上。
呵呵!!! luzhiwei512总结的真好!
对于b)点补充下:
我们知道,realloc是从堆上分配内存的,当扩大一块内存空间时, realloc()试图直接从堆上现存的数据后面的那些字节中获得附加的字节,如果能够满足,自然天下太平;可如果数据后面的字节不够的话,问题就出来了,那么就使用堆上第一个有足够大小的自由块,现存的数据然后就被拷贝至新的位置,而老块则放回到堆上。
参考资料: http://www.moon-soft.com/doc/18826.htm
中智咨询
2024-08-28 广告
2024-08-28 广告
在当今竞争激烈的商业环境中,企业需要不断提高自身的竞争力,以保持市场份额和增加利润。通过人效提升,企业可以更有效地利用有限的资源,提高生产力和效益,从而实现盈利目标。中智咨询提供全方位的组织人效评价与诊断、人效提升方案等数据和管理咨询服务。...
点击进入详情页
本回答由中智咨询提供
2010-06-13
展开全部
是的,realloc()函数会释放原来的空间。
用另一个指针指向原来的地址,然后再用realloc()分配,之后再用“另一个指针”查看一下原来的地址保存的值(有时可能不会马上改变,因为原来的空间可能没有在释放后立刻被用作它途)
用另一个指针指向原来的地址,然后再用realloc()分配,之后再用“另一个指针”查看一下原来的地址保存的值(有时可能不会马上改变,因为原来的空间可能没有在释放后立刻被用作它途)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
函数原型为: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
功能是将p所指向的内存区域的大小改为size,size可以比原来分配的内存空间大或者小,返回值为指向该内存区的指针,或分配内存失败则返回NULL.....原来的那块内存没有删掉(即释放),如果比原来的大的话,应该是直接在原来的基础上扩充到size大小.....
例子:p=malloc(10) ; p1=realloc(p,20)
p,p1均为void类型的指针...
p为指向已分配内存的指针,将其大小增加为20,如果malloc,realloc函数执行成功的话,p和p1的值是一样的,即指向该内存区的首个内存单元....
如果不成功的话,就是楼上说的,返回NULL
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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。
一、如果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。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询