1. 程式人生 > 實用技巧 >C語言建立指標的陣列

C語言建立指標的陣列

背景:

  在學習基數排序的時候,需要對多個關鍵字進行分類然後再收集。在進行對每位數字排序的時候,對於在一位上數字相同的數字分為一類,即用一個連結串列儲存,使用尾插法(一定要使用尾插法,保證有序)。因此需要建立一個數組大小為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. 指標的陣列需要給指標也賦予空間,說到底還是對指標不夠了解