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

patchouramria Messages postés 17 Date d'inscription mardi 30 septembre 2014 Statut Membre Dernière intervention 21 janvier 2015 - Modifié par Whismeril le 10/12/2014 à 07:28
patchouramria Messages postés 17 Date d'inscription mardi 30 septembre 2014 Statut Membre Dernière intervention 21 janvier 2015 - 10 déc. 2014 à 12:45
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

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
10 déc. 2014 à 10:14
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
0
patchouramria Messages postés 17 Date d'inscription mardi 30 septembre 2014 Statut Membre Dernière intervention 21 janvier 2015 1
10 déc. 2014 à 11:49
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
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
10 déc. 2014 à 11:54
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
0
patchouramria Messages postés 17 Date d'inscription mardi 30 septembre 2014 Statut Membre Dernière intervention 21 janvier 2015 1
10 déc. 2014 à 12:33
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 :(
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
patchouramria Messages postés 17 Date d'inscription mardi 30 septembre 2014 Statut Membre Dernière intervention 21 janvier 2015 1
10 déc. 2014 à 12:45
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 ;)
0
Rejoignez-nous