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:
et le fichier de données
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Voici maintenant le résultat de l'exécution.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
toute les impression qui n ont rien a voir sont la pour tester jusqu'ou je peux aller dans le code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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?
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.
Partager