Erreur de segmentation en C

trita -  
kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   -
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
Configuration: Linux
Firefox 3.0.3

5 réponses

  1. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    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
  2. trita
     
    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
  3. trita
     
    ah si c'est bon j'ai trouvé !!!
    si je fais Rectangle rectangle = malloc(sizeof(long)) ça marche !
    merci bien !!
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    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