J'ai une probléme au niveau de memoire lors de l'execution

Messages postés
17
Date d'inscription
mardi 30 septembre 2014
Statut
Membre
Dernière intervention
21 janvier 2015
-
Cette code affiche seulement la prémiére execution correcte mais aprés la mise de Free(CG),il retourne les résultats sous forme des adresses mémoires,aidez moi svp,je suis bloqueé et merci


CG = (float **) malloc (K* sizeof(float*) );
for (i=0; i<K; i++)
{
 CG[i]=(float*) malloc (m*sizeof(float*));
}
  centre_gravite(&K,C,CG,&v,A,T,&n,&m);
  affiche_centregravite(CG,&K,&m);

DD = (float **) malloc (n* sizeof(float*) );
for (i=0; i<n; i++)
{
 DD[i]=(float*) malloc (K*sizeof(float*));
}
TN = (int *) malloc (K* sizeof(int) );
 for(i=0;i<K;i++)
 {
     TN[i]=i+1;
 }
 CG1 = (float *) malloc (m* sizeof(float) );//Centre d'inertie de centre de gravite
 A1 = (int **) malloc (n* sizeof(int*) );
for (i=0; i<n; i++)
{
 A1[i]=(int*) malloc (m*sizeof(int*));
}


while(test1==0)
{

distance_centre(CG,&K,&n,&m,DD,T);
affiche_clientcentre(DD,&K,&n);
affectation(&n,&m,&K,A1,DD,TN);

printf("affichage de l'inertie \n");
  for(i=0;i<K;i++)
  {
      printf("%f\n",CG[i][0]);
      printf("%f\n",CG[i][1]);
  }
  printf("affichage de l'inertie se termine \n");
       for(i=0;i<K;i++)
  {
      v2=TN[i];
      printf("Pour le centre: %d les client correspondant sont:\n",v2);
      printf("%d-",v2);
      affichage_classe1(&n,&m,A1,v2);
      printf("%d",v2);
      printf("\n\n");
  }
sss=0;
ss1=0;
  for(j=0;j<K;j++)
        {
            x2=CG[j][0];
            sss=x2+sss;
            y2=CG[j][1];
            ss1=y2+ss1;
        }

        if ((sss!=*Xt)&&(ss1!=*Yt))
        {
            printf("l'inertie ne pas convergente \n");
            test1=0;
            free(Xt);
            free(Yt);
        *Xt=sss;
        *Yt=ss1;
        printf(" bonjour %f\n",*Xt);
        printf("bonjour %f\n",*Yt);
            free(CG);
        centre_gravite1(&K,TN,CG,A1,T,&n,&m);
        printf("Le centre de gravité 1 \n");
        for(i=0;i<K;i++)
        {
            printf("%f \n",CG[i][0]);
            printf("%f \n",CG[i][1]);
        }
        free(DD);
        free(A1);
        }
        else
            if ((sss==*Xt)&&(ss1==*Yt))
        {
            printf("l'inertie est convergente \n");
            test1=1;
            free(CG1);
        CG1[0]=sss;
        CG1[1]=ss1;
        printf(" bonjour %f\n",CG1[0]);
        printf(" bonjour %f\n",CG1[1]);
  
        for(i=0;i<K;i++)
  {
      v2=TN[i];
      printf("Pour le centre: %d les client correspondant sont:\n",v2);
      printf("%d-",v2);
      affichage_classe1(&n,&m,A1,v2);
      printf("%d",v2);
      printf("\n\n");
  }
        }
        printf("fin de boucle \n");
    }
Afficher la suite 

5 réponses

Messages postés
3801
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 novembre 2019
90
0
Merci
Bonjour.

Comprends-tu ce que tu fais ? Je t'invite à relire tes cours...
Si tu "free" un tableau, alors il est détruit et tu ne peux plus l'utiliser. Or, dans ton code, tu fais un free(CG) suivi d'un utilisation de CG. Ça ne peut pas fonctionner...

__________________________________________________________________________________________________

Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Commenter la réponse de cptpingu
Messages postés
17
Date d'inscription
mardi 30 septembre 2014
Statut
Membre
Dernière intervention
21 janvier 2015
1
0
Merci
Bonjour,
je fait free(CG) suivi d'un utilisation de CG car je besoin du tableau CG vide pour le remplir par des nouveaux valeurs,est ce que tu me aider à trouver l'erreur et merci
Commenter la réponse de patchouramria
Messages postés
3801
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 novembre 2019
90
0
Merci
Il faut recréer CG, via un malloc, après ton free, vu que tu l'as détruit...

__________________________________________________________________________________________________

Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Commenter la réponse de cptpingu
Messages postés
17
Date d'inscription
mardi 30 septembre 2014
Statut
Membre
Dernière intervention
21 janvier 2015
1
0
Merci
je vais le fait et le tester,mais aussi la méme probléme,il me retourne les adresses des cases mémoires au lieu des valeurs dans les tableau :(
Commenter la réponse de patchouramria
Messages postés
17
Date d'inscription
mardi 30 septembre 2014
Statut
Membre
Dernière intervention
21 janvier 2015
1
0
Merci
Pour le probléme de mémoire se resout,mais le boucle s'arrétent sur la premiére condition (ne pas convergente),et il ne passe pas à l'itération centre_gravite1(&K,TN,CG,A1,T,&n,&m),merci de m' aider par une idée ;)
Commenter la réponse de patchouramria