Realloc和memmove

时间:2014-11-02 21:55:42

标签: c

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

1 个答案:

答案 0 :(得分:2)

您的代码存在两个问题:

  1. realloc可能会在失败时返回0,在这种情况下旧指针仍然有效 (如果没有请求空间,你不必担心它可能会返回0,因为你要求一些。)
  2. 您需要将元素数量memmove乘以元素的大小。
  3. 顺便说一句,更喜欢sizeof *pointersizeof(elementtype),这不容易出错。

    作为第二种方式,无条件地进行调用会略微简化您的代码(总是很棒),并且在多次使用(测量)时可能不会更昂贵,甚至可能更高效。