【发布时间】:2013-07-29 09:16:31
【问题描述】:
我在使用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。
【问题讨论】:
-
您没有收到任何编译错误吗?
-
没有。这是一条运行时消息。
-
它必须访问受保护之外的数组。