2015-12-02 59 views
-1

我只是試驗C,我試圖把一個列表中的列表。問題是,當它打印數組 - >計數它顯示分段錯誤,當我嘗試更改數組 - >頭 - > X。我做錯了什麼?我還沒有完成我的程序,所以這就是爲什麼我使用宏。列入列表分段錯誤

#include <stdio.h> 
    #include <stdlib.h> 
    #define N 3 

    typedef struct smallList{ 
     int x; 
     struct smallList *next; 
    } smallList; 

    typedef struct bigList{ 
     int count; 
     struct bigList *next; 
     smallList *head; 
    } bigList; 

    void main(void) 
    { 
     bigList *array = (bigList*)malloc(sizeof(bigList)); 

     array->count = 3; 
     printf("%d \n", array->count); 

     array->head->x = 10; 
     printf("%d \n", array->head->x); 
    } 

回答

1

分割的錯,因爲你是在試圖訪問數據結構,你不分配內存發生在這裏。你應該爲head指針分配內存。這可以通過 array->head = malloc(sizeof(smallList));

你的問題的有效代碼做的是:

當然
#include <stdio.h> 

    #include <stdlib.h> 


    #define N 3 


    typedef struct smallList{ 

     int x; 

     struct smallList *next; 

    }smallList; 


    typedef struct bigList{ 

     int count; 

     struct bigList *next; 

     smallList *head; 

    }bigList; 


    void main(void) 

    { 
     bigList *array = malloc(sizeof(bigList)); 
    array->head = malloc(sizeof(smallList)); 
     array->count = 3; 
     printf("%d \n", array->count); 

     array->head->x = 10; 
     printf("%d \n", array->head->x); 

    } 
2

您還沒有爲數組中的head變量分配內存。之後您arraymalloc空間嘗試像

array->head = malloc(sizeof(smallList)); 
+0

Aahhhh ......我傻。我用array-> head =(smallList *)malloc(sizeof(smallList)); – user5552189

+0

另外這裏的東西,直到幾個星期前我不知道有關malloc和爲什麼你不應該投射指針: http://stackoverflow.com/questions/605845/do-i-cast-the-result-of -malloc – Taelsin