3

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

所以假设我们有这样的东西

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

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

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

4

2 回答 2

5

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

只是返回原始指针并且在内存或其他东西中什么都不做?

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

于 2012-05-10T01:18:55.950 回答
1

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

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

于 2012-05-10T01:18:45.347 回答