【发布时间】:2019-02-20 08:51:32
【问题描述】:
所以我遇到了一个问题,似乎 realloc 没有复制缓冲区中的所有数据,所以我决定运行以下代码作为测试。
#include <stdlib.h>
int main(int argc, char** argv)
{
int* tmp_array = malloc(sizeof(int) * 2);
tmp_array[0] = 1;
tmp_array[1] = 2;
tmp_array = realloc(tmp_array, 4);
return 0;
}
我最初遇到的同样问题仍在发生,只有部分数据被复制。缓冲区中的 1 被复制,但 2 没有。我首先为 2 个整数分配了足够的空间,所以如果对 tmp_array 的分配应该是有效的。然后重新分配到 4 似乎是有效的。我什至尝试将返回的 realloc 指针显式转换为 int* 但这没有帮助。
不幸的是,我无法在调试器(VS 2017)中显示内存窗口的屏幕截图,但它肯定会在 realloc 之前显示缓冲区中的 1 和 2,并且在 realloc 之后仅显示缓冲区中的 1。
我确信我可以通过使用 malloc 和 memcpy 手动复制数据来重新实现 realloc,但我仍然只是想知道为什么这不起作用。
非常感谢任何帮助!
【问题讨论】: