Double pointeur et realloc
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:
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:
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?