我目前有一对结构对。为了插入一个新元素,我将数组重新分配到arraySize + 1,然后从insertIndex,arraySize-insertIndex memmove到目标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);
}
答案 0 :(得分:2)
您的代码存在两个问题:
realloc
可能会在失败时返回0,在这种情况下旧指针仍然有效
(如果没有请求空间,你不必担心它可能会返回0,因为你要求一些。)memmove
乘以元素的大小。顺便说一句,更喜欢sizeof *pointer
到sizeof(elementtype)
,这不容易出错。
作为第二种方式,无条件地进行调用会略微简化您的代码(总是很棒),并且在多次使用(测量)时可能不会更昂贵,甚至可能更高效。