[英]Why assigning an element to unsized array change the assigned element in c?
[英]C global unsized array?
我們有一個學校項目,任何使用C的信息系統。為了保留動態大小的學生記錄列表,我選擇了一個鏈表數據結構。 今天早上我的朋友讓我看看他的系統。 我對他的記錄清單感到驚訝:
#include <stdio.h>
/* and the rest of the includes */
/* global unsized array */
int array[];
int main()
{
int n;
for (n=0; n < 5; n ++) {
array[n] = n;
}
for (n=0; n < 5; n ++) {
printf("array[%d] = %d\n", n, array[n]);
}
return 0;
}
與代碼一樣,他聲明了一個未整理的數組,它是整個程序的全局(在bss段中)。 他能夠通過用非零值的值覆蓋后續的內存塊來為數組添加新條目,這樣他就可以遍歷數組:
for (n=0; array[n]; n++) {
/* do something */
}
他用過(我也用它測試過)Turbo C v1。 我在linux中嘗試過它也可以。
由於我之前從未遇到過這種技術,我認為它存在問題。 所以,是的,我想知道為什么這是一個壞主意,為什么更喜歡這個鏈接列表。
int array[];
技術上稱為不完整類型的數組 。 簡單地說它相當於:
int array[1];
這不好只是因為:
如果使用鏈接列表,則可以檢查內存是否正確分配。
int *ptr;
ptr = (int *)malloc(sizeof(int))
if(ptr==NULL)
{
printf("No Memory!!!");
}
但是使用你的代碼,如果使用具有大邊界的數組進行測試,程序就會崩潰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.