我正在寫一些代碼,我用了功能calloc
。關於calloc的奇怪事情
我明白,當傳遞給這個函數的第一個和第二個參數都是0時,函數將爲0個元素分配必要的空間,每個元素的大小爲0,但這裏是奇怪的事情。
即使n> 0,該程序也能正常工作。爲什麼會發生這種情況?我認爲它應該顯示一個錯誤,因爲我試圖寫入一個不存在的數組位置。謝謝!
#include <stdio.h>
#include <stdlib.h>
int main(){
int n;
scanf("%d", &n);
int *test = calloc(0, 0);
for(int i = 0; i < n; i++){
test[i] = 100;
printf("%d ", test[i]);
}
return 0;
}
未定義的行爲意味着會發生任何事情。 – Kevin
無語法錯誤=在'c'中沒有編譯錯誤。你編譯得很好,但是你寫的超出了你的內存區域(當'n> 0'),這是未定義的行爲。 – yano
你不會在c中得到這樣的錯誤。它會嘗試將其寫入指定的地址。你作爲程序員必須小心確保它不會發生。 –