据我所知,
realloc
应该进行更大/更小的分配并复制此处提供的数据。我正在制作一个 sprisheet atlas 解析器并遇到了这个,然后用一个非常简单的代码重现了它。
uint32_t* a = malloc(10 * sizeof(uint32_t));
for (uint32_t i = 0; i < 10; i++) a[i] = i;
for (uint32_t i = 0; i < 10; i++) printf("%d\n", a[i]);
printf("\n\n");
a = realloc(a, 10);
for (uint32_t i = 0; i < 10; i++) printf("%d\n", a[i]);
free(a);
第一个 for 循环按预期输出
0 1 2 3 4 5 6 7 8 9
,但第二个 for 循环打印此 0 1 2 3 0 0 0 0 0 0
。为什么 realloc 将最后 6 个元素的内存清零?我做错了什么?
realloc
的第二个参数是请求的字节数,而不是元素数。 a = realloc(a, 10);
将分配更改为 10 个字节,这不是您想要的。