2016-05-12 2 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

Это такой FAQ. Наверняка, должен быть хороший дубликат для «Я пытаюсь хранить случайные вещи через неинициализированный указатель» где-то? Кто угодно? – Lundin

ответ

6

col_dates *cd;указатель, который не указывает ни на что. У него нет памяти, чтобы указать и, следовательно, нет данных, чтобы указать на. Поэтому вы не можете просто сделать cd->data;, потому что data нет (вы пытаетесь получить доступ к ничего и получить segfault).

Вы должны выделить память первого:

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

Смежные вопросы