2014-10-16 79 views
0

Yay。分段故障。填充結構C的分段錯誤,縮小到一行

但是,我已經把它縮小到導致分段錯誤的確切線上。

下面是相關的代碼塊: 所以這裏是我定義的結構。

typedef struct { 
    int placeID; 
    char *city; 
    char *continent; 
    char *cultural; 
    char *outdoors; 
    int dist_from_source; 
} place_t; 

這裏是我的一個place_t的初始化:

place_t *temp_place=NULL; 

這導致賽格故障的線路:

temp_place->placeID=tmp; 

其中TMP只是與值1

一個int

我敢肯定,這只是一些愚蠢的指針邏輯,我一時失明,但任何幫助將是真正的欣賞d!

謝謝。

+1

你解引用一個空指針......你必須先讓'temp_place'指向一些已分配的存儲空間,然後才能嘗試通過它寫入 – 2014-10-16 23:02:02

+0

我應該在初始化時使用malloc一些空間嗎? – 2014-10-16 23:03:48

+0

這是一種方法,是的 – 2014-10-16 23:06:35

回答

1

您需要分配內存的結構指針第一:

place_t *temp_place=malloc(sizeof(struct place_t)); //allocate memory first 
    temp_place->placeID=tmp;        //assign values 
0

一般情況下,只要你定義一個指針結構,定義在內存中的位置,可以存儲結構的地址。

但是,直到你還沒有爲該結構分配內存(例如使用malloccalloc)並將該內存的地址分配給上述指針時,就不能使用它,因爲它指向沒有(或者說,沒有指向任何有用的東西)。