Débutant en liste chainée

Je suis débutant en C , et j'ai un projet à faire mais malheuresement j'ai eu beaucoup de problème.
Pour commencer , j'ai fait une fonction qui initialise une liste chainée V par les c premiers éléments d'une autre liste chainée X .
Lorsque j'exécute le programme , il me signale l'erreur " a cessé de fonctioner" (windows 8)

void initialisation_clusters(personne *X, clusters *V ,int c)
{


clusters *first,*p,*precedV;
personne *tmpoX ;
tmpoX = (personne *)malloc(sizeof(personne));
tmpoX=X;

double num1, num2; int i ;first=precedV=NULL;
num1=tmpoX->perso.taille;
num2=tmpoX->perso.poids;
for (i=1;i<c;i++)
{p=(clusters *) malloc( sizeof(struct clusters) );
p->centre.taille = num1;
p->centre.poids = num2;
if (first==NULL) first=p;
else precedV-> next =p;
precedV=p;
tmpoX=tmpoX->next;
num1=tmpoX->perso.taille;
num2=tmpoX->perso.poids;
}

}

4 réponses

  1. Contributeur
    Bonjour,

    tmpoX = (personne *)malloc(sizeof(personne));
    tmpoX=X; 
    

    Belle fuite de mémoire ;-). Tu alloues une zone (malloc) et ensuite tu écrases le pointeur sur cette zone par X Twww.g
    (donc plus de free() possible).
    0
    1. Code blocks,
      Oui j'utilise Windows Defender comme anti-virus
      0
      1. tu utilises quoi comme compilateur?
        as tu un anti-virus, si oui lequel?
        1
        1. J'ai oublié les structures
          typedef struct coordonnees coordonnees;
          struct coordonnees
          {
          double taille ;
          double poids ;
          };

          typedef struct personne personne;
          struct personne
          {
          coordonnees perso;
          personne* next;
          };

          typedef struct clusters clusters;
          struct clusters
          {
          coordonnees centre ;
          clusters *next;
          };
          0