Tu définis le type Pos comme pointeur sur une structure anonyme (on va dire "aPos").
typedef struct {
/*...*/
} *Doc;
Idem pour Doc.
int main(int argc, char *argv[])
{
Doc doc = malloc(sizeof(Doc));
Pos cur = malloc(sizeof(Pos));
Deux erreurs :
Il faut vérifier le retour de *alloc ;
sizeof(Doc) retourne la taille du type Doc, i.e. pointeur sur la structure anonyme "aDoc". Or, ce que tu veux, c'est allouer un espace mémoire suffisant pour une structure "aDoc".
Il fallait donc faire soit (code non testé) :
typedef struct {
int row;
int col;
} aPos;
typedef aPos *Pos;
/*...*/
Pos cur = malloc(sizeof(aPos));
Mais cette solution demande de redéfinir tes structures de données, donc c'est assez intrusif (peut-être avais-tu une bonne raison pour laisser le type structure anonyme). Il y a donc une autre solution, qui es tà la fois plus simple et plus maintenable :
Pos cur = malloc(sizeof *cur)
Avec cette dernière, sizeof *cur détermine la taille correcte, quel que soit le type de cur, ou la manière dont il a été défini (*).
cur->;row = 1;
Erreur de syntaxe, ton programme ne devrait même pas compiler (ou alors le point-virgule est arrivé là durant le copié-collé ?).
(*)Bon, à l'exception d'un type incomplet où la définition de la structure ne serait pas visible.
# Erreur de typage et malloc
Posté par alf . En réponse au message problème de struct et d'alignement. Évalué à 3.
typedef struct { int row; int col; } *Pos;Tu définis le type Pos comme pointeur sur une structure anonyme (on va dire "aPos").typedef struct { /*...*/ } *Doc;Idem pour Doc.int main(int argc, char *argv[]) { Doc doc = malloc(sizeof(Doc)); Pos cur = malloc(sizeof(Pos));Deux erreurs :- Il faut vérifier le retour de *alloc ;
- sizeof(Doc) retourne la taille du type Doc, i.e. pointeur sur la structure anonyme "aDoc". Or, ce que tu veux, c'est allouer un espace mémoire suffisant pour une structure "aDoc".
Il fallait donc faire soit (code non testé) :typedef struct { int row; int col; } aPos; typedef aPos *Pos; /*...*/ Pos cur = malloc(sizeof(aPos));Mais cette solution demande de redéfinir tes structures de données, donc c'est assez intrusif (peut-être avais-tu une bonne raison pour laisser le type structure anonyme). Il y a donc une autre solution, qui es tà la fois plus simple et plus maintenable : Avec cette dernière, sizeof *cur détermine la taille correcte, quel que soit le type de cur, ou la manière dont il a été défini (*). Erreur de syntaxe, ton programme ne devrait même pas compiler (ou alors le point-virgule est arrivé là durant le copié-collé ?). (*)Bon, à l'exception d'un type incomplet où la définition de la structure ne serait pas visible.