Realloc调整大小数组

时间:2017-03-30 14:38:45

标签: c++ arrays memory-leaks realloc

我对在C ++中使用realloc()函数有疑问。我需要它通过删除第一项基本上改变数组的大小。这就是我所做的

cell* Queue::pull() {
    cell* data = cellArray[0];
    arrayLen--;
    cell** temp = (cell**)realloc(cellArray+1, sizeof(cell*)* (arrayLen));
    if (temp == NULL) {
        return 0;
    }
    cellArray = temp;
    return data;
}

arrayLen是整数,它存储队列的当前长度,而cellArray是先前分配和填充的cell *数组。

cell** cellArray;
int arrayLen = 0;

我的问题是:这会导致内存泄漏吗? realloc是否释放了数组第一项所使用的空间,或者这与以下内容基本相同:

cell** temp = cellArray+1;

提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果扩展分配的内存,则以下情况属实:

  • 如果在内存空间后需要当前内存段,则直接扩展此内存空间,realloc ()将返回原始指针。
  • 如果当前内存段后面的空闲字节数不够,则使用第一个内存块来满足此要求,将当前数据复制到新位置,然后释放原始数据块,返回新的内存块位置。
  • 如果应用程序失败,将返回NULL,这次,原始指针仍然有效。

并且你应该注意:如果调用成功,无论当前的可用空间后面的内存空间是否满足要求,都会释放原始指针,返回指针,虽然返回指针和原始指针是相同的,不能再次释放原始指针