我在使用时遇到了一些问题realloc()
,所以我制作了一个示例程序来说明使用尽可能少的代码的问题。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
unsigned int i;
unsigned long long *a;
srand(time(NULL));
a = malloc(sizeof(unsigned long long));
for (i = 0; i < 20; ++i)
{
a[i] = rand() % 32;
printf("%llu\n", a[i]);
a = realloc(a, (i + 1) * sizeof(unsigned long long));
}
return 0;
}
这输出:
* 检测到 glibc演示:realloc():下一个大小无效:0x0000000000dc3010 * *
为什么会崩溃?
编辑:
我尝试(i + 1)
更改为(i + 2)
然后程序运行,但我不明白为什么。我只要求将内存空间扩展一 unsigned long long
。