tableau dynamique de structures initialisé dans une autre fonction
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:
1 2 3 4 5 6 7 8
| #include <stdio.h>
#include <stdlib.h>
typedef struct Machin Machin;
struct Machin
{
char id[10];
}; |
Code:
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';
}
} |
Code:
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;
} |
Donc, quand je fais le calloc dans main après la déclaration: c'est bon,
quand je le fait dans la fonction Add: c'est pas bon.
Pourquoi?