本文介绍了我可以假设调用realloc的非常小的尺寸将释放其余的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
让我们考虑一下这个很短的code的片段:
的#include<&stdlib.h中GT;诠释的main()
{
字符* A =的malloc(20000);
字符* B = realloc的(一,5); 免费(B);
返回0;
}
阅读手册页的realloc后,我不能完全肯定,第二行会造成19995额外的字节被释放。引述手册页:的realloc()的函数改变内存块的大小由ptr大小字节
,但是从这个定义,我可以肯定的。其余部分将被释放?
我的意思是,由指出b
块肯定包含5个免费字节,所以它会为一个懒惰相符分配器只是没有做的realloc的线什么就够了吗?
请注意:我使用的分配似乎释放19 995额外的字节,作为注释掉时,所示的valgrind的免费(B)
行:
== == 4457 HEAP摘要:
== == 4457使用在出口处:在1块5个字节
== == 4457总堆的使用情况:2 allocs,1的FreeS,2万5字节分配
解决方案
是由C标准保证,如果新的对象可以进行分配。
这篇关于我可以假设调用realloc的非常小的尺寸将释放其余的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!