• # Type struct != type pointeur

    Posté par . En réponse au message problème de struct et d'alignement. Évalué à 4.

    Tu a définis Doc et Pos directement comme étant des types "pointeur vers structure" au lieu "structure"; tes deux malloc utilisent donc le sizeof de ces pointeurs (soit 4 octets sur une machine 32 bits) au lieu de la taille réelle des structures.
    Tes deux variables "doc" et "cur" vont donc se retrouver allouées dans la ram avec une taille de 4 octets alors qu'elles en ont besoin de plus, et les acces de leurs champs vont alors déborder. Par exemple là, quand tu écris la valeur de doc->cur, tu vas en fait taper pile à l'emplacement mémoire de cur->row :)

    Tu pourrais corriger rapidement avec "malloc(sizeof(&Doc))" pour avoir la taille réellement nécessaire; mais je trouve que ça fait beaucoup de circonvolutions et que ça embrouille le cerveau.
    Définis plutot tes types de structure en tant que structure ("typedef struct {...} Doc" au lieu de "*Doc") et déclare des variables explicitement pointeurs
    (Doc *doc, Pos *cur;), ce sera plus clair.