Realloc 调整大小数组

Realloc resizing array

本文关键字:数组 小数 调整 Realloc      更新时间:2023-10-16

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

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;

提前谢谢你。

如果扩展分配的内存,则满足以下条件:

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

并且要注意:如果调用成功,不管当前内存空间后面的可用空间满足要求,都会释放原始指针,返回一个指针,虽然返回的指针和原始指针是一样的,但说明不能再释放原始指针