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 : 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");
  }
}
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
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 !