J'ai une probléme au niveau de memoire lors de l'execution
patchouramria
Messages postés17Date d'inscriptionmardi 30 septembre 2014StatutMembreDernière intervention21 janvier 2015
-
Modifié par Whismeril le 10/12/2014 à 07:28
patchouramria
Messages postés17Date d'inscriptionmardi 30 septembre 2014StatutMembreDernière intervention21 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");
}
A voir également:
J'ai une probléme au niveau de memoire lors de l'execution
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 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...
patchouramria
Messages postés17Date d'inscriptionmardi 30 septembre 2014StatutMembreDernière intervention21 janvier 20151 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
patchouramria
Messages postés17Date d'inscriptionmardi 30 septembre 2014StatutMembreDernière intervention21 janvier 20151 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 ;)