Crash de tableau dynamique C ++ 2D
-
10-07-2019 - |
Question
Bonjour, j'ai un problème avec le tableau dynamique 2D.
int main()
{
double **M;
int M_dimension;
int i;
M_dimension = 10;
M = new double *[M_dimension];
for (i=0;i<M_dimension;i++)
{
M[i] = new double[M_dimension];
}
M[0][0] = 1.0;
...
}
Le programme fonctionne mais je souhaiterais initialiser un tableau 2D à l'aide d'une telle fonction:
void initialize2D(double **M,int M_dimension)
{
int i;
M = new double *[M_dimension];
for (i=0;i<M_dimension;i++)
{
M[i] = new double[M_dimension];
}
}
Enfin, le programme ressemble à ceci:
int main()
{
double **M;
int M_dimension;
int i;
M_dimension = 10;
initialize2D(M,M_dimension);
M[0][0] = 1.0; //crash
...
}
Malheureusement, il se bloque à M [0] [0] = 1.0;
Merci pour toute aide ou suggestion.
La solution
Vous transmettez M
par valeur plutôt que par référence. initialize2D
doit modifier la valeur du pointeur à l'autre M
afin qu'il pointe vers la mémoire allouée
Essayez de remplacer votre signature de fonction par ceci:
void initialize2D(double **&M,int M_dimension)
Ou
void initialize2D(double ***M,int M_dimension) {
...
*M = new double *[M_dimension];
...
}
Autres conseils
Vous devez passer une référence à double **
au lieu de double **
pour fonctionner, sinon la modification apportée à un pointeur après avoir affecté à M le résultat de new
se perd à la sortie d'une fonction.
Le problème peut être lié à la déclaration d'un paramètre entier tel que int M_dimension vide initialize2D (double ** M, int M_dimension)
et vous initialisez le tableau dynamique en tant que: M [i] = nouveau double [M_dimension];
où il vient à la contradiction parce que vous avez déclaré la variable M_dimension comme un entier, puis vous l'utilisez comme un double
essayez de cette façon: soit changer le type de données du tableau ou la M_dimension, donc les deux ont le même type de données.
espérons que cela vous aidera
Pourquoi n'utilisez-vous pas std :: vector
ou Boost.MultiArray
Il serait assez facile de définir un tableau à 2 dimensions comme vecteur générique de vecteurs en C ++