2012-05-10 20 views
1

有人可以解释realloc中的第二个参数是什么,因为我无法找到一种方法来测试它。c realloc,尺寸真的意味着什么

因此,假设我们有这样的事情

int *p = malloc(sizeof(int)); //we have just enough space to store single int value 
现在如果我要存储在第2个INT值

我需要发送到ReAlloc如果作为第二个参数块的2 * sizeof(int)新的大小或sizeof(int)因为它需要为INT

大小在情况下,我应该向ReAlloc如果在这种情况下2 * sizeof(int)新块的总价值扩展内存,会是什么的情况下,做我送它只是sizeof(int),只是返回原来的指针和内存内什么都不做或者是其他东西?

+0

这取决于实施。它可能什么都不做,并返回旧的指针,或者它可能会分配新的内存和复制。 –

回答

0

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

你的第二个问题是不完全清楚,所以我会尽力将所有这些片段包装成一个句子。如果调用与原始malloc调用大小相同的realloc,则需要返回原始指针还是将数据移动到(实现定义的)更方便的位置;如果您尝试在您只请求一个int的空间中存储两个int,那么您触发了未定义的行为。这可能破坏其他分配的内存(导致计算错误的结果)或(更可能),这可能破坏的malloc自己的记账数据(可能是你的程序将与段错误中止稍晚时的malloc实际需要看数据上。

3

第二个参数是在字节的内存块(共新大小)的新的大小。如果你想室2个整数,你会使用2 * sizeof(int)

只是返回原来的指针和内存中的什么也不做别的东西?

这不是由S保证pecifications。许多实现只会返回原始指针,但它们可以轻松地移动它。对于2个整数,您不会获得足够大的新内存分配,但是,只有存储位置的原始数据值足够大,可用于sizeof(int)