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';
        }
}
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;
}
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?