Bonjour à tous,
j'essaye de me remettre petit à petit au c...
J'ai une petite question d'entrée de jeu:
pourquoi lorsque je déclare un tableau de structure dynamique dans le main et que j'alloue directement la mémoire, ca fonctionne et pas quand je l'alloue dans une autre fonction...
exemple:
le code ci dessous affiche:
AAAAAAAAA
BBBBBBBBBB
CCCCCCCCC
etc...
(si ca c'est pas du code utile)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #include <stdio.h> #include <stdlib.h> typedef struct Machin Machin; struct Machin { char id[10]; };
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 void Add(Machin trucs[]) { //trucs = calloc(1, sizeof(Machin)); //si je fais un calloc ici ca affiche que des caractères rien avoir. int i; for(i = 0; i < 9; i++) { trucs[0].id[i] = 'A'; } trucs[0].id[9] = '\0'; int j; for (j = 1; j < 15; j++) { trucs = realloc(trucs, (j + 1) * sizeof(Machin)); //c'est débile de le faire 15 * 1 à 1 mais c'était pour mon épanouissement personnel int i; for(i = 0; i < 9; i++) { trucs[j].id[i] = 'A' + j; } trucs[j].id[9] = '\0'; } }Donc, quand je fais le calloc dans main après la déclaration: c'est bon,
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 int main() { Machin* trucs; trucs = calloc(1, sizeof(Machin)); // si je commente ici et que je fais le calloc dans la fonction add, ca affiche des caractères rien avoir. Add(trucs); int y; for(y = 0; y < 15; y++) { printf("res: %s\n",trucs[y].id); } free(trucs); return 0; }
quand je le fait dans la fonction Add: c'est pas bon.
Pourquoi?
Partager