Erreur de segmentation en C

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

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    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.
    1. 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 ...
      1. ah si c'est bon j'ai trouvé !!!
        si je fais Rectangle rectangle = malloc(sizeof(long)) ça marche !
        merci bien !!
        1. Modérateur
          Ah non!
          Tu alloues de la place pour un rectangle, pas pour un entier long!
          struct RectangleP *p = (struct RectangleP *) malloc(sizeof(struct RectangleP)) ;