当我将缓冲区重新分配为较小时,是否会删除缓冲区中的数据,直到达到正确的大小?

时间:2016-12-23 03:47:21

标签: c realloc

我的问题有点令人困惑,但我问的问题是realloc在最小化缓冲区时对剩余数据做了什么?例如,我只想说我有一个填充50字节的缓冲区(假设我的缓冲区最多可以容纳50个字节的数据)。稍后在我的代码中,我使用realloc调整缓冲区大小,现在只能容纳30个字节。 realloc左边超过20个字节做什么?

1 个答案:

答案 0 :(得分:7)

realloc正好是malloc + memcpy + free,但有时它会设法就地执行它返回的指针在数值上等于指针你投入(但你永远不能依赖它)。剩下的20个字节被释放。

从C标准,7.22.3.5 realloc函数

  

realloc函数释放ptr指向的旧对象,并返回指向size指定大小的新对象的指针。新对象的内容应与解除分配之前的旧对象的内容相同,直到新旧大小中的较小者为止。新对象中超出旧对象大小的任何字节都有不确定的值。

另请参阅http://en.cppreference.com/w/c/memory/reallochttp://pubs.opengroup.org/onlinepubs/9699919799/functions/realloc.html