【发布时间】:2016-07-14 22:40:32
【问题描述】:
我现在正在学习 C/C++,对内存分配函数的行为感到困惑,尤其是 realloc()。
假设我分配了十个ints:
int * i = malloc(sizeof(int) * 10);
我使用该数组一段时间,但后来意识到我需要更多空间,所以我将 i 重新分配给 20 ints:
int * j = realloc(i, sizeof(int) * 20);
i = j;
但是,似乎重新分配之前的堆可能包含一些其他数据紧接在最初分配给 i 的内存空间之后,因为在分配和重新分配 i 之间我可以执行另一个 malloc , 这可能会在i 之后分配空间。
然后,当我重新分配时,添加到 i 的新空间似乎会立即扩展到(并覆盖)数据。
会发生这样的事情吗?如果是这样,我应该怎么做才能避免意外覆盖数据?
【问题讨论】:
-
如果没有足够的可用空间来直接修复增加,realloc 会将现有数据移动到有足够空间的地方。这就是它返回指针的原因。
-
..或者,当然,失败。
-
总是检查
malloc和朋友的结果! (以及通常会遇到程序相关错误的函数) -
Can realloc() expand into (and overwrite) subsequent data?- 没有。
标签: c memory malloc dynamic-memory-allocation realloc