Bonjour,
J'ai écrit une procédure prenant en paramètre un pointeur vers une matrice creuse (qui est une structure à 4 champs : nombre de lignes/colonnes et deux pointeurs lignes/colonnes vers un tableau de pointeurs, voir schéma) et qui affiche les éléments (non nuls du coup) en parcourant les listes du tableau lignes.
Le problème c'est qu'une fois dans cette procédure (avec comme paramètre ptr_creuse qui pointe vers une matrice creuse précédemment initialisée) la matrice *(ptr_creuse) change! Et ceci dès qu'on alloue de la mémoire pour le pointeur courant p, est-ce qu'il pourrait "écraser" de la mémoire où était écrite la matrice *(ptr_creuse) ? Pourtant dans le main j'ai pris soin d'allouer de la mémoire pour ce pointeur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 void affiche_creuse(struct creuse_t * ptr_matrice){ int i ; struct cell_t * p ; // pointeur courant p = malloc(sizeof(struct cell_t)) ; for(i=0 ; i<ptr_matrice->nbr_lig ; i++){ p = *((ptr_matrice->lignes)+i) ; // pointe sur la première cellule de la ligne i while (p != NULL){ // affiche des cellules de la ligne i printf("%5i",p->val); p = p->suiv_lig ; } printf("\n"); } }
Voici une capture d'écran décrivant ce qui se passe avec gdb : capture
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 struct creuse_t * ptr_creuse ; ptr_creuse = malloc(sizeof(struct creuse_t)) ;
Merci !
Partager