realloc 将之前分配的部分内存归零

问题描述 投票:0回答:1

据我所知,

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 个元素的内存清零?我做错了什么?

c memory realloc
1个回答
0
投票

realloc
的第二个参数是请求的字节数,而不是元素数。
a = realloc(a, 10);
将分配更改为 10 个字节,这不是您想要的。

© www.soinside.com 2019 - 2024. All rights reserved.