我有一些問題使用realloc()
,所以我做了一個示例程序,用盡可能少的代碼來說明問題。使用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 * *
爲什麼這會崩潰?
編輯: 我試圖chaning (i + 1)
到(i + 2)
然後程序的工作,但我不明白爲什麼。我只請求擴展內存空間一個unsigned long long
。
你沒有收到任何編譯錯誤? –
不是。這是一個運行時間消息。 – Jori
它必須訪問受保護的外部數組。 – BLUEPIXY