【发布时间】:2017-08-24 13:31:48
【问题描述】:
我对在 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;
提前谢谢你。
【问题讨论】:
-
传递给
realloc的任何指针不是C 分配函数之一的返回值是未定义的。cellArray+1不是这样的指针。 -
“C++ 中的 realloc() 函数” 呃……你为什么在 C++ 中使用
realloc?? -
如果你曾经在那个东西中存储了一个带有构造函数/析构函数的 C++ 对象并通过
realloc处理它,那么所有的地狱都会崩溃。不要这样做。 -
只需使用
std::vector并忘记realloc、malloc和free的存在。对于动态分配,甚至忘记new和delete存在 99% 的时间,只需使用std::make_unique和std::make_shared。
标签: c++ arrays memory-leaks realloc