allocation dynamique ne fonctionne qu une fois.
Bonjour.
dans le cadre de mes études je dois réaliser un petit programme qui doit pouvoir allouer un nombre de float dynamiquement: nombre d'élément lu par un scanf. Toutes les données en entrées sont en redirection vers un fichiers de données.
Celui ci est de blocs constitués comme suit.
Première ligne : int code int n(nombre d'élement)
deuxième ligne: suite de n float que je dois stocker dynamiquement
et ainsi de suite.
voici le code de mon programme:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
#include<stdio.h>
#include<math.h>
#include<malloc.h>
float * alloc_mem(int n);
void liberer_mem(float *x);
void lecture( float *x, float *y, int n);
void liberer_mem(float *tab)
{
free(tab);
}
float * alloc_mem(int n)
{
float *temp;
temp=(float*)malloc(n*sizeof(float));
return temp;
}
void lecture( float *x, float *y, int n)
{
int i=0;
for(i=0;i<n;i++)
{
scanf("%f %f",x+(i*sizeof(float)),y+(i*sizeof(float)));
printf("je lis\n");
}
}
void impression(float *tab, int n)
{
int i=0;
for(i=0;i<n;i++)
{
if(i%5==0)
printf("\n");
printf("%2.3f | ",*(tab+(i*sizeof(float))));
}
}
int main (void)
{
int code, n, i=1;
/*x et y représentent en fait un nuage de point*/
float *x, *y;
while(scanf("%d %d",&code,&n)==2)
{
printf("n=%d\n",n);
printf("nuage%d .\n",i);
printf("**********\n");
printf("est ce quez j arrive la?");
if((x=alloc_mem(n))==NULL)
printf("erreur sur l allocation\n");
printf("%p\n",x);
printf("jalloue la mémoire");
y=alloc_mem(n);
lecture(x,y,n);
printf("impression de x\n");
impression(x,n);
printf("impression de y\n");
impression(y,n);
liberer_mem(x);
liberer_mem(y);
printf("%p\n",x);
printf("\n");
i++;
}
return 0;
} |
et le fichier de données
Code:
1 2 3 4 5 6 7 8 9
|
1 10
1.52 2.52 1.21 5.52 6.52 9.32 1.25 5.65 9.32 4.36 12.32 3.65 4.95 1.75 5.25 2. 32.3 33.6 12. 32.3
1 5
2.25 21.32 5. 21.78 5.256 21.54 1.25 1.65 2.65 58.95
1 10
1.52 2.52 1.21 5.52 6.52 9.32 1.25 5.65 9.32 4.36 12.32 3.65 4.95 1.75 5.25 2. 32.3 33.6 12. 32.3
1 5
2.25 21.32 5. 21.78 5.256 21.54 1.25 1.65 2.65 58.95 |
Voici maintenant le résultat de l'exécution.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
n=10
nuage 1 .
**********
est ce quez j arrive la?003D24B8
jalloue la mÚmoireje lis
je lis
je lis
je lis
je lis
je lis
je lis
je lis
je lis
je lis
impression du tableau x
1.520 | 1.210 | 6.520 | 1.250 | 9.320 |
12.320 | 4.950 | 5.250 | 32.300 | 12.000 |
impression du tableau y
1.250 | 9.320 | 12.320 | 4.950 | 5.250 |
32.300 | 12.000 | 2.000 | 33.600 | 32.300 | 003D24B8
n=5
nuage 2 .
**********
est ce quez j arrive la? |
toute les impression qui n ont rien a voir sont la pour tester jusqu'ou je peux aller dans le code.
Apparement le programme s'arrete après l'allocation la deuxième fois, je ne comprend pas pourquoi...
Pöurriez vous m'expliquer pourquoi?
D'avance Merci. :lol: