【问题标题】:c realloc, what does size really meanc realloc,大小的真正含义是什么
【发布时间】:2012-05-18 13:43:29
【问题描述】:

谁能解释 realloc 中的第二个参数到底是什么,因为我找不到测试它的方法。

假设我们有这样的东西

int *p = malloc(sizeof(int)); //we have just enough space to store single int value

现在如果我想在 p 中存储 2 个 int 值,我是否需要将作为第二个参数 2 * sizeof(int) 块的新大小或 sizeof(int) 发送到 realloc,因为它需要为 int 大小扩展内存

如果我应该在这种情况下将新块的总值发送到 realloc 2 * sizeof(int),如果我只发送它sizeof(int),它会做什么,只返回原始指针并且在内存中什么都不做或其他什么?

【问题讨论】:

  • 这取决于实现。它可能什么都不做并返回旧指针,也可能分配新内存并复制。

标签: c realloc


【解决方案1】:

第二个参数是内存块的新大小(total new size),以字节为单位。如果您想要 2 个整数的空间,您可以使用 2 * sizeof(int)

只返回原始指针,在内存中什么也不做?

规格不保证这一点。许多实现将只返回原始指针不变,但他们可以很容易地移动它。但是,您不会获得足够大的新内存分配以容纳 2 个整数,而只会获得足够大的内存位置中的原始数据值以容纳 sizeof(int)

【讨论】:

    【解决方案2】:

    您想告诉 realloc 分配的新总大小。所以从你的例子来看,2 * sizeof(int)

    您的第二个问题并不完全清楚,因此我将尝试将所有这些部分包装成一句话。如果你调用 realloc 时的大小值与最初调用 malloc 的值相同,则取决于实现是返回原始指针还是将数据移动到(实现定义的)更方便的地方;如果您随后尝试将两个ints 存储在您只请求一个int 的空间中,那么您已经触发了未定义的行为。它可能会破坏其他分配的内存(导致计算错误)或(更有可能)破坏 malloc 自己的簿记数据(很可能稍后当 malloc 实际查看数据时,您的程序会因 Segfault 中止。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-06
      • 2012-03-30
      • 2011-10-10
      • 2012-08-03
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多