C語言建立指標的陣列
阿新 • • 發佈:2020-12-03
背景:
在學習基數排序的時候,需要對多個關鍵字進行分類然後再收集。在進行對每位數字排序的時候,對於在一位上數字相同的數字分為一類,即用一個連結串列儲存,使用尾插法(一定要使用尾插法,保證有序)。因此需要建立一個數組大小為10,每個元素為一個連結串列的陣列
程式碼:
typedef struct LinkedNode { int value; struct LinkedNode* next; }LNode, *List;
List* bucketlist = (List*)malloc(sizeof(List) * 10);//這是基陣列,用來儲存儲存相同關鍵字的值
問題:
出現段錯誤,訪問了不該訪問的地方。
解決:
自己折騰了一會,解決 不了就找JAVA群的大佬尋求幫助,竹佬一針見血地指出了問題:
對於bucketlist陣列,我們只是給了每個元素賦予指標的空間,但是還沒有給指標的結點賦予空間,所以無法向指標中存入資料。
for(int i = 0;i<10;i++){ bucketlist[i] = (List)malloc(sizeof(LNode)); } for(int i = 0;i < 10;i++) { bucketlist[i]->next = NULL;//初始化基陣列 }
加入這幾行程式碼後,成功解決。
總結:
1. malloc函式中給出的記憶體大小是這個陣列所需要的大小,即裡面元素的總體大小,如果是List就是LNode * n
2. 指標的陣列需要給指標也賦予空間,說到底還是對指標不夠了解