我目前有一个结构对数组。为了插入一个新元素,我将数组重新分配给arraySize + 1,然后从insertIndex,arraySize-insertIndex到目标arr + insertIndex + 1记忆。这个逻辑有什么问题吗?我收到Uninitialised value was created by a heap allocation,我怀疑这是因为此实现存在一些不正确的地方...

代码在这里:

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时返回0)。
您需要将元素数量乘以memmove并随元素的大小移动。


顺便说一句,相对于sizeof *pointer,更喜欢sizeof(elementtype),这不太容易出错。

另外,无条件进行调用会稍微简化您的代码(总是很棒),并且在多次使用(度量)上可能不会变得更昂贵,甚至可能会更有效。

关于c - 重新分配和内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26704906/

10-12 16:05