Problème allocation dynamique d'un tableau
Résolu/Fermé
KiitKaate
Messages postés
4
Date d'inscription
jeudi 13 octobre 2016
Statut
Membre
Dernière intervention
20 novembre 2016
-
Modifié par crapoulou le 11/11/2016 à 21:17
KiitKaate Messages postés 4 Date d'inscription jeudi 13 octobre 2016 Statut Membre Dernière intervention 20 novembre 2016 - 20 nov. 2016 à 11:01
KiitKaate Messages postés 4 Date d'inscription jeudi 13 octobre 2016 Statut Membre Dernière intervention 20 novembre 2016 - 20 nov. 2016 à 11:01
A voir également:
- Problème allocation dynamique d'un tableau
- Tableau croisé dynamique - Guide
- Le nom du champ de tableau croisé dynamique n'est pas valide ✓ - Forum Excel
- Tableau croisé dynamique différence entre deux colonnes ✓ - Forum Excel
- Afficher un tableau en c - Forum C
- Tableau ascii - Guide
3 réponses
Dalfab
Messages postés
703
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
1 mars 2023
100
12 nov. 2016 à 10:53
12 nov. 2016 à 10:53
Bonjour,
g->nbl=l; c'est plutôt l'inverse qu'il faut faire l=g->nbl;.
g->nbl=l; c'est plutôt l'inverse qu'il faut faire l=g->nbl;.
Il faut free(g) également
edit: correction du code
#include <stdio.h>
#include <stdlib.h>
typedef struct s_grille {
int nbl;
int nbc;
int **cellules;
} Grille;
void alloue_grille (int l, int c, Grille *g);
void libere_grille (Grille* g);
int main(){
int i,j,c=0;
int line = 30, col = 50 ;
Grille *g = malloc(sizeof(Grille));
alloue_grille(line,col,g);
//remplissage
for(i = 0; i < line; i++){
for( j = 0; j < col ; j++){
g->cellules[j][i] = c++;
}
}
//affichage
for(i = 0; i < line; i++){
for( j = 0; j < col ; j++){
printf("%d ", g->cellules[j][i]);
}
printf("\n");
}
libere_grille(g);
return 0;
}
void alloue_grille (int l, int c, Grille *g){
int i;
g->nbl=l;
g->nbc=c;
g->cellules = (int**)malloc( c * sizeof(int*));
for(i=0;i<c;i++) g->cellules[i] = (int*)calloc(l,sizeof(int*));
}
void libere_grille (Grille* g){
int i;
for(i=0;i<g->nbc;i++) free(g->cellules[i]);
free(g->cellules);
free(g);
}
==7077== HEAP SUMMARY:
==7077== in use at exit: 0 bytes in 0 blocks
==7077== total heap usage: 53 allocs, 53 frees, 13,440 bytes allocated
==7077==
==7077== All heap blocks were freed -- no leaks are possible
==7077==
edit: correction du code
KiitKaate
Messages postés
4
Date d'inscription
jeudi 13 octobre 2016
Statut
Membre
Dernière intervention
20 novembre 2016
20 nov. 2016 à 11:01
20 nov. 2016 à 11:01
Merci, j'ai remplacé les malloc par calloc et ça fonctionne
Dalfab
Messages postés
703
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
1 mars 2023
100
12 nov. 2016 à 15:58
12 nov. 2016 à 15:58
L'allocation et la libération de la grille elle-même n'est pas visible dans ce code.
La fonction set_morte() reçoit la grille par copie, j'espère qu'elle est bien prototypée et qu'elle ne modifie pas la grille.
La fonction set_morte() reçoit la grille par copie, j'espère qu'elle est bien prototypée et qu'elle ne modifie pas la grille.
Modifié par KiitKaate le 12/11/2016 à 12:14
Sur valgrind j'obtiens ceci:
Conditional jump or move depends on uninitialised value(s)
==2709== at 0x4C2DB3C: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==2709== by 0x40146F: alloue_grille (grille.c:42) //erreur au niveau du 1er malloc
==2709== by 0x4012FD: init_grille_from_file (grille.c:18)
==2709== by 0x400899: main (main.c:21)
in use at exit: 552 bytes in 1 blocks
==3101== total heap usage: 2 allocs, 1 frees, 4,648 bytes allocated