Bonjour,
j'aimerai créer un tableau "population" qui contiendrait plusieurs variables de type "Famille"
Dans mes messages précédents, j'allouais l'espace mémoire dans le main, mais j'aimerai rendre la chose plus élégante en le faisant via une fonction appelée ici "initialisePopulation".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 typedef struct Famille Famille; struct Famille{ int nIndividus; // nombre d'individus dans la famille int* ages; // leurs ages };
Le code compile, mais à l'éxécution j'ai.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ~/Documents/C/famille$ ./test 20 2 Erreur de segmentation (core dumped)
Je ne vois pas d'où vient le problème, pensant faire tous les "free" nécessaires.
Merci beaucoup pour vos remarques !
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 #include <stdio.h> #include <stdlib.h> typedef struct Famille Famille; struct Famille{ int nIndividus; // nombre d'individus dans la famille int* ages; // leurs ages }; void initialisePopulation(Famille* population, int nFamilles, int nIndividus); void viderMemoire(Famille* population, int nFamilles); int main(int argc, char* argv[]){ int nFamilles = 0; int nIndividus = 0; nFamilles = atoi(argv[1]); nIndividus = atoi(argv[2]); Famille* population = NULL; // une population = plusieurs familles initialisePopulation(population, nFamilles, nIndividus); viderMemoire(population, nFamilles); free(population); return(0); } void initialisePopulation(Famille* population, int nFamilles, int nIndividus){ int i = 0; population = malloc(nFamilles * sizeof(Famille)); for(i=0; i<nFamilles; i++){ population[i].ages = NULL; population[i].ages = malloc(nIndividus * sizeof(int)); // on suppose toutes les familles de même taille pour faire simple } } void viderMemoire(Famille* population, int nFamilles){ int i = 0; for(i=0; i<nFamilles; i++){ free(population[i].ages); } }
M.
Partager