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

Signaler
Messages postés
17
Date d'inscription
mardi 30 septembre 2014
Statut
Membre
Dernière intervention
21 janvier 2015
-
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");
    }

5 réponses

Messages postés
3809
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
22 avril 2020
105
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
Messages postés
17
Date d'inscription
mardi 30 septembre 2014
Statut
Membre
Dernière intervention
21 janvier 2015
1
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
Messages postés
3809
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
22 avril 2020
105
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
Messages postés
17
Date d'inscription
mardi 30 septembre 2014
Statut
Membre
Dernière intervention
21 janvier 2015
1
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 :(
Messages postés
17
Date d'inscription
mardi 30 septembre 2014
Statut
Membre
Dernière intervention
21 janvier 2015
1
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 ;)