代码之家  ›  专栏  ›  技术社区  ›  Fumerian Gaming

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

  •  3
  • Fumerian Gaming  · 技术社区  · 9 年前

    我的问题有点令人困惑,但我想问的是 realloc 当它最小化缓冲区时,如何处理剩余数据?例如,假设我有一个填充了50字节的缓冲区(假设我的缓冲区最多可以容纳50字节的数据)。稍后,在我的代码中,我使用 realloc 到目前为止,只能容纳30字节。它做什么 realloc 剩下的20个字节怎么办?

    1 回复  |  直到 9 年前
        1
  •  7
  •   Cubbi    9 年前

    realloc 正是 malloc + memcpy + free ,只是有时它会在适当的位置执行,并且它返回的指针在数值上等于您放入的指针(但您永远不能依赖于此)。剩余的20个字节被释放。

    根据C标准, 7.22.3.5 realloc函数

    这个 realloc 函数将释放所指向的旧对象 ptr 并返回一个指向具有指定大小的新对象的指针 size 新对象的内容应与解除分配前的旧对象的内容相同,以新大小和旧大小中较小者为准。新对象中超出旧对象大小的任何字节都具有不确定值。

    另见 http://en.cppreference.com/w/c/memory/realloc http://pubs.opengroup.org/onlinepubs/9699919799/functions/realloc.html