variable modifiée après appel de procédure
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.
Code:
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");
}
} |
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:
1 2
| struct creuse_t * ptr_creuse ;
ptr_creuse = malloc(sizeof(struct creuse_t)) ; |
Voici une capture d'écran décrivant ce qui se passe avec gdb : capture
Merci !