Bonjour, dans le cadre d'un projet je suis amené à travailler sur des matrices ( double pointeur) que je veux modifier.

Par exemple,
J'ai la matrice matContr suivante:

1 1 0 0 0 0
1 -1 0 0 0 127
1 0 1 0 0 0
1 0 -1 0 0 63
1 0 0 1 0 0
1 0 0 -1 0 0
1 0 0 0 1 0
1 0 0 0 -1 0

Nombre de ligne = NC et nombre de colonne = ND.
Sur cette matrice, je garde toujours la premiere et la dernier colonne et sur les colonnes qui restent, je veux pouvoir en choisir 3 consécutives (indice = colonne de départ -1).

Mon code qui est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int ligne = 0;
  int colonne = 0 ;
  int NbRows = NC + 1;
 
 
  for(int i=0;i<NC;i++)
  {
      colonne=0;
        for(int j=0;j<ND;j++)
        {
          //On ne prend en compte que les dimensions voulues ainsi que la colonne des constantes
          if(j==0 || (j>indice && j<(indice+4)) || j>(ND-2) )
          {
            matContr[ligne][colonne]=matContr[i][j];
            colonne++;
          }
        }
        ligne++;
      }
Jusque là pas de problème, à cette nouvelle matrice , j'aimerais lui rajouter une ligne ( par exemple avec que des 0).
Il faut donc que je réallouer l'espace suffisant ( NC+1 ) mais j'ai une erreur de segmentation que je ne comprend pas.


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  matContr = (int**)realloc(matContr, sizeof(int*) * NbRows);
 
  for(int i=0;i<NC;i++)
  {
      colonne=0;
        for(int j=0;j<ND;j++)
        {
          //On ne prend en compte que les dimensions voulues ainsi que la colonne des constantes
          if(j==0 || (j>indice && j<(indice+4)) || j>(ND-2) )
          {
            matContr[ligne][colonne]=matContr[i][j];
            colonne++;
          }
        }
        ligne++;
      }
 
  //Nouvelle ligne
  for(int k=0;k<ND:k++)
  {
    matContr[NC][k]=0;
  }
Voyez vous le problème?