2016-05-12 14 views
-3

ein Problem, dass ich nicht in der Lage bin zu lösen ...Segmentation fault: 11, mit Zeigern

Ich habe einen Segmentierungsfehler, wenn ich die new_col() Funktion aufrufen. Strukturen sind in Ordnung, Funktion nicht.

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; 

} 

Vielen Dank! :)

+0

Dies ist eine solche FAQ. Sicherlich muss es irgendwo ein gutes Duplikat für "Ich versuche zufällige Sachen durch einen nicht initialisierten Zeiger zu speichern" geben? Jemand? – Lundin

Antwort

6

col_dates *cd; ist ein Zeiger, der nichts zeigt. Es hat keine Speicher zu zeigen und damit keine Daten zu zeigen. So können Sie nicht einfach cd->data; tun, weil data ist nicht dort (Sie versuchen, auf nichts zugreifen und erhalten einen segfault).

Sie haben Speicher zuzuweisen zuerst:

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

// access cd and return it 

Nachdem Sie cd zuteilen, zuweisen cd->tab auch:

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

Vergessen Sie nicht zu free der Zeiger zurückgegeben, nachdem Sie nicht brauchen, es nicht mehr.

+2

Sollte nicht 'cd-> tab = malloc (size * sizeof (date *)) sein;'? Registerkarte soll ein Array von Zeigern sein. –

+0

@DavideSpataro, ja, es sollte, danke, dass du das bemerkt hast! – ForceBru

+0

Vielen Dank! Ich habe den malloc() vergessen :) – HapLifeMan