2009-11-30 10 views
0

Salut J'ai un problème avec la matrice dynamique 2D.Crash de tableau dynamique 2D C++

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; 

... 
} 

programme fonctionne, mais je voudrais initialiser tableau 2D en utilisant 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 se présente comme suit:

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.

+0

Si cela est pour pratique je vous recommande d'utiliser un vecteur de vecteurs. C'est beaucoup plus facile à gérer. –

+0

Un vecteur de vecteurs a son propre ensemble de problèmes. Vous ne voulez généralement pas de tableau dentelé, et le vecteur de vecteurs n'a pas la même localisation qu'un seul tableau 2d contigu – jalf

Répondre

8

Vous transmettez M par valeur, et non par référence. initialize2D doit changer la valeur du pointeur à pointeur M tel qu'il pointe vers la mémoire allouée

Essayez de changer votre signature de fonction à ce lieu:

void initialize2D(double **&M,int M_dimension) 

Ou

void initialize2D(double ***M,int M_dimension) { 
    ... 
    *M = new double *[M_dimension]; 
    ... 
} 
+0

ou double *** – Naveen

1

Vous devez passer une référence à double** au lieu de double** pour fonctionner, sinon la modification apportée à un pointeur après avoir assigné M le reslut de new est perdue à la sortie d'un fonction.

0

ce que le problème pourrait être est où vous déclarer un paramètre entier tel que int M_dimension vide initialize2D (Double ** M, int M_dimension)

puis initialisation vous le tableau dynamique: M [i] = nouveau double [M_dimension];

où il vient à la contradiction parce que vous déclarez la M_dimension variable comme un entier, puis vous l'utiliser comme un double

essayer cette façon: soit changer le type de tableau de données ou M_dimension, donc alors à la fois d'entre eux ont le même type de données.

nous espérons que cela va vous aider