0

该函数可以将内存块移动到新位置,在这种情况下,将返回新位置。
例如,我有一个指向数组的指针:

int *arr; // somewhere next it initialized, filled with elements and etc

我需要的地方:

void* location = realloc(arr, NEW_SIZE);

旧的内存块位置会发生什么?

如果 realloc 将不是数学的指针返回给 arr,我应该使用下一个代码吗?:

delete arr;
arr = (int*)location;
4

3 回答 3

7

该函数realloc继承自良好的旧 C。它不运行析构函数或执行任何其他 C++ 魔法。它也只能应用于使用malloc(和朋友)分配的块——它不能用于使用 'new' 分配的块

于 2012-05-18T08:03:36.943 回答
4

规则 #1:不要将 new/delete 与 malloc/free 混用。

如果您malloc()首先分配 with 并且需要更大的堆空间,那么您需要调用realloc()which 将返回一个新指针,该指针可能不会映射到相同的内存区域,arr因此您不应该使用它。

免费 malloc'ed/realloc'ed 空间free

于 2012-05-18T08:06:08.250 回答
3

realloc(void *ptr, size_t new_size)需要给定的内存区域,该区域ptr指向之前由 malloc()、calloc() 或 realloc() 分配并且尚未使用 free() 释放,否则,结果未定义。

仅将reallocmalloccalloc或其他realloc一起使用,并使用free清理它。
在 C++ 中,始终将newdeletenew[]delete[]一起使用。

于 2012-05-18T08:09:20.013 回答