2016-05-12 92 views
-3

一個問題,我無法解決...分割錯誤:11,帶指針

我有一個分段錯誤,當我調用new_col()函數。 結構正常,功能沒有。

typedef struct { 
    int jour; 
    int mois; 
    int annee; 
} date; 

typedef struct { 
    date** tab; 
    int size; 
} col_dates; 

// Fonction B1.c 
col_dates* new_col(int size) { 

    int i; 
    col_dates* cd; 

    for(i=0; i<size; i++) { 

     cd->tab[i] = NULL; 

    } 

    cd->size = i; 

    return cd; 

} 

謝謝! :)

+0

這是一個常見問題解答。當然,對於「我試圖通過未初始化的指針存儲隨機的東西」的某個地方肯定有一個好的副本?任何人? – Lundin

回答

6

col_dates *cd;指針它不指向任何東西。它沒有任何內存指向,因此,沒有數據指向。所以你不能只是做cd->data;,因爲data不存在(你試圖訪問沒有並獲得段錯誤)。

你必須先分配內存:

col_dates *cd = malloc(sizeof(col_dates)); 

// access cd and return it 

後你分配cd,分配cd->tab還有:

cd->tab = malloc(size * sizeof(date *)); 

不要忘了free你不需要後返回的指針它了。

+2

不應該是'cd-> tab = malloc(size * sizeof(date *));'?選項卡旨在成爲指針數組。 –

+0

@DavideSpataro,應該,謝謝你的注意! – ForceBru

+0

非常感謝!我忘了malloc():) – HapLifeMan