2015-10-04 1 views
1

J'ai donc regardé quelques questions en ligne pour comprendre comment configurer et remplir un tableau multidimensionnel dynamique et je pensais que je l'avais perdu, mais pour une raison quelconque, ma fonction n'accèdera à rien après le premier (0) colonne. Pour mon test, je mets dans un tableau de 2X2:En boucle dans une matrice allouée dynamiquement

 
2 2 (part of another function that gives the size of the matrix) 
1 2 
3 4 

Quand je débugger je reçois seulement

 
1 random# from initializing the array 
3 random# from initializing the array 

Je ne suis pas sûr de ce que je fais mal avec ce morceau de code, je suis aussi nouveau en C++.

double* matrix_read(const int m, const int n) 
{ 
double **mat = new double*[m]; 

for (int j = 0; j < m; ++j) { 
    mat[j] = new double[n]; 
} 
for (int i = 0; i < m; ++i) { 
    for (int j = 0; j < n; ++j) { 

     cin >> mat[i][j]; 
    } 
} 
double debug = mat[2][2]; 
return *mat; 
} 

A l'intérieur de la fonction principale, c'est ce que j'envoie à la fonction.

int x, y, m, n; 
     cin >> x; 
     cin >> y; 
     double *mat_a = matrix_read(x, y); 
     cin >> m; //2nd matrix read in 
     cin >> n; 
     double *mat_b = matrix_read(m, n); 
+0

Post un peu plus de code – P0W

+0

@ P0W J'ai ajouté l'appel de fonction et comment je passe les paramètres à la fonction. Le (double debug = mat [2] [2]) était une sortie de débogage que j'ai essayé de lire et j'ai eu une erreur. – Motorscooter

+0

Vous ne renvoyez que la première ligne de la matrice 'return * mat 'au lieu de la matrice entière. En plus 'mat [2] [2]' est un accès hors limites pour votre tableau 2x2. – aslg

Répondre

0

Votre matrice est représentée par un tableau de pointeurs, chaque pointeur dans les points de tableau, à son tour, à un tableau de doubles. Chacun de ces tableaux est contigu en mémoire, mais pas entre eux. Cela signifie que mat[0][0] est juste devant mat[0][1] en mémoire. Mais mat[1][0] peut être dans un endroit complètement différent. En retournant uniquement la première ligne de votre matrice, *mat (identique à mat[0]), vous perdrez des informations. Tout ce que vous avez accès est la première ligne.

Vous devez renvoyer la matrice entière.

double** matrix_read(...) { 
    ... 
    return mat; 
} 

(Edit: D'ailleurs, quelqu'un devra supprimer la matrice plus tard .. et ils doivent supprimer plusieurs tableaux, ugh Vous devriez faire une enveloppe de structure pour des matrices, ou utiliser un seul tableau, ou utilisez un. vecteur de vecteurs)

+0

Merci pour l'aide, je viens de découvrir que je ne peux pas le faire de cette façon et j'ai besoin d'utiliser des tableaux 1D et les traiter comme 2D. Je suppose que je vais passer du temps à chercher comment faire ça. Encore merci pour l'aide. – Motorscooter