本文介绍了我可以假设调用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的非常小的尺寸将释放其余的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-27 15:15