c realloc,大小的真正意义

时间:2012-05-10 01:15:08

标签: c realloc

有人可以解释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)它会做什么,只返回原始指针并在内存中不执行任何操作或别的什么?

2 个答案:

答案 0 :(得分:3)

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

  

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

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

答案 1 :(得分:0)

您想告诉realloc分配的新总大小。因此,从您的示例2 * sizeof(int)

开始

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