我目前有一个结构对数组。为了插入一个新元素,我将数组重新分配给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/