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
- Tableau ascii - Guide
- Tableau word - Guide
- Le fichier contient un tableau présentant un extrait des livres les plus prêtés à paris en 2016. filtrez le tableau pour ne faire apparaître que les bandes dessinées ado. puis filtrez le tableau pour ne faire apparaître que celles dont l'auteur est zep. quel est le titre de la bande dessinée ado de zep qui a été la plus prêtée d'après ce tableau ? ✓ - Forum Windows 10
- Liste déroulante dynamique excel - Guide
3 réponses
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
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;.
Utilisateur anonyme
Modifié par Rocailleux le 12/11/2016 à 15:17
Modifié par Rocailleux le 12/11/2016 à 15:17
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
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
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