2009-12-20 3 views
0

J'ai deux structure cerreur de segmentation tout en attribuant les membres de la structure en c

struct data{ 
    char *name; 
}; 

struct lst{ 
    struct lst *next; 
    struct table *data; 
}; 

quand je suis en train d'attribuer un nom comme

L> Nom data-> = d-> nom ; printf ("% s", l-> data-> name);

il donne un défaut de segmentation. Est-ce parce que la mémoire est en lecture seule ou causée par une autre raison?

ok je résolu le problème:) je l'ai fait:

L> data = d; d a le nom :) déjà remercie tous

+2

Postez le code qui initialise l. Et n'utilisez pas l comme nom de variable. –

+1

du code manque. Comment avez-vous alloué la mémoire? – Pierre

+3

Est-ce un l ou un I? Pas un bon choix de nom –

Répondre

6

Juste avant de faire cette instruction causant des infractions graves de segmentation, insérer:

printf("%p\n", l); 
printf("%p\n", l->data); 
printf("%p\n", d); 
printf("%p\n", d->name); 

et voir lequel est NULL (ou une valeur non valide).

Votre violation de segmentation est presque certainement causée par un pointeur non initialisé.

+0

+1, Vous oubliez d'imprimer aussi d :) – Patrick

+1

Ou utilisez simplement un débogueur :) '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '. : D –

+1

@Andreas - Pourquoi tuer un cafard avec un lance-roquettes? –

0

Je peux être provoqué par un membre pointant dans une zone non valide.

0

l->data est NULL très probablement

Questions connexes