有人可以解释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)
它会做什么,只返回原始指针并在内存中不执行任何操作或别的什么?
答案 0 :(得分:3)
第二个参数是内存块的新大小(总新大小),以字节为单位。如果您想要2个整数的空间,则可以使用2 * sizeof(int)
。
只返回原始指针并在内存或其他内容中什么都不做?
规格不保证这一点。许多实现只会返回原始指针,但它们可以轻松地移动它。您不会获得足够大的新内存分配2个整数,但是,只有内存位置的原始数据值足够大sizeof(int)
。
答案 1 :(得分:0)
您想告诉realloc分配的新总大小。因此,从您的示例2 * sizeof(int)
。
你的第二个问题并不完全清楚,所以我会尝试将所有这些内容整理成一句话。如果使用与原始对malloc的调用相同的大小值调用realloc,则由实现决定是返回原始指针还是将数据移动到(实现定义的)更方便的位置;如果您然后尝试将两个int
存储在您只请求一个int
的空间中,那么您已经触发了未定义的行为。它可能会破坏其他已分配的内存(在计算中导致错误的结果)或(更有可能)它可能破坏malloc自己的簿记数据(当malloc实际上看一下数据时,你的程序可能会稍后用Segfault中止。