Erreur de segmentation en C

Fermé
trita - 28 oct. 2008 à 15:51
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 28 oct. 2008 à 17:11
Bonjour,
j'écris un programme avec 2 fichier, rectangle.h et rectangle.c .

Dans mon fichier rectangle.h, j'ai nommée une structure ainsi ;
struct RectangleP;
#define Rectangle struct RectangleP *
Ensuite je l'ai definie de cette maniere dans mon rectangle.c :
struct RectangleP {
int couleur;
};

J'ai ensuite une fonction (un constructeur) :
Rectangle rectangleInit(int i) {
Rectangle rectangle;
rectangle->couleur=i;
return rectangle;
}


A la compilation j'ai une erreur : Erreur de segmentation

Je ne vois pas ou j'ai fais mon erreur ! Si vous pouvez m'aider svp
Cdt

5 réponses

kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
28 oct. 2008 à 16:22
Donc tu fais:
Rectangle rectangleInit(int i) { 
Rectangle rectangle; 
rectangle->couleur=i; 
return rectangle; 
}

Ce qui signifie:
struct RectangleP * rectangleInit(int i) { 
struct RectangleP * rectangle; 
rectangle->couleur=i; 
return rectangle; 
}


Tu es en train d'assigner une valeur dans un pointeur qui ne pointe nulle part, non initialisé.
Au passage il vaut mieux utiliser typedef que #define pour créer un type.
0
d'accord je comprend pourquoi ça ne marche pas, evidement si je pointe nulle part ... mais comment initialiser mon rectangle alors ?
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
28 oct. 2008 à 16:56
0
je fais une malloc sur quoi alors ?
sur la couleur ? int couleur = malloc(sizeof(long)) ?
parsque une malloc sur la structure Rectangle complete je vois pas comment faire ...
merci de m'aider ...
0
ah si c'est bon j'ai trouvé !!!
si je fais Rectangle rectangle = malloc(sizeof(long)) ça marche !
merci bien !!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
28 oct. 2008 à 17:11
Ah non!
Tu alloues de la place pour un rectangle, pas pour un entier long!
struct RectangleP *p = (struct RectangleP *) malloc(sizeof(struct RectangleP)) ;
0