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.

Était-ce utile?

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 ++

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top