Realloc和memmove

Realloc和memmove,c,C,我目前有一个结构对数组。为了插入新元素,我将realloc到array以arraySize+1,然后将memmove从insertIndex、arraySize insertIndex移动到目标arr+insertIndex+1。这个逻辑有什么错误吗?我收到的未初始化值是由堆分配创建的,我怀疑这是因为此实现有一些不正确的地方 代码如下: arraySize++; arr = realloc(arr,arraySize*sizeof(pair)); ... /* C

我目前有一个结构对数组。为了插入新元素,我将realloc到array以arraySize+1,然后将memmove从insertIndex、arraySize insertIndex移动到目标arr+insertIndex+1。这个逻辑有什么错误吗?我收到的未初始化值是由堆分配创建的,我怀疑这是因为此实现有一些不正确的地方

代码如下:

arraySize++;
arr = realloc(arr,arraySize*sizeof(pair));               

...
/* Calculate insertIndex */
...                                                                 
if (insertIndex+1 < numPairs) {                                         
      memmove(arr+insertIndex+1,arr+insertIndex,arraySize-insertIndex-1);   
}  

您的代码有两个问题:

realloc可能在失败时返回0,在这种情况下,旧指针仍然有效。 您不必担心,如果没有请求空间,它也可能返回0,就像您请求一些空间一样。 您需要将memmove应移动的元素数量与元素大小相乘。 另一方面,更喜欢指向sizeofelementtype的sizeof*指针,这样更不容易出错


另一方面,无条件地进行调用会稍微简化您的代码,这总是很好的,并且在多次使用时可能不会更昂贵,它甚至可能更高性能。

大小必须是realloc手册页中的SizeOffAir的乘积:函数可能会将内存块移动到一个新位置,该位置的地址由函数返回。或者它可能会在失败时返回0…可能会有类似memmovearr+insertIndex+1、arr+insertIndex的预期代码,arraySize-insertIndex-1*尺寸FPAIR;但这不是问题所在。问题是realloc可能返回NULL。