[C++] tableau 2D alloué dynamiquement
Groarh
Messages postés
682
Date d'inscription
Statut
Membre
Dernière intervention
-
Groarh Messages postés 682 Date d'inscription Statut Membre Dernière intervention -
Groarh Messages postés 682 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
problème tout con vous me direz, mais ça me prend la tête x(
J'ai un problème d'allocation de mémoire dans une classe qui possède des constantes. Pour mettre les choses au clair j'ai bricolé la classe la plus petite possible qui corresponde au problème, mais j'ai pas réussi à le résoudre...
J'ai donc une classe de matrices minimialiste :
Elle marche impec, j'ai testé. Seulement, ça se gâte quand je veux rendre des membres constants :
Le constructeur me sort une erreur de segmentation au moment d'instancier rows. Vous savez d'où ça peut venir ?
Merci d'avance ;)
problème tout con vous me direz, mais ça me prend la tête x(
J'ai un problème d'allocation de mémoire dans une classe qui possède des constantes. Pour mettre les choses au clair j'ai bricolé la classe la plus petite possible qui corresponde au problème, mais j'ai pas réussi à le résoudre...
J'ai donc une classe de matrices minimialiste :
class Matrix { public: int** rows; int width; int height; Matrix(int m, int n) { width = n; height = m; rows = new int*[m]; for (int i=0; i<m; i++) { rows[i] = new int[n]; } } ~Matrix() { for (int i=0; i<height; i++) { delete[] rows[i]; } delete[] rows; } };
Elle marche impec, j'ai testé. Seulement, ça se gâte quand je veux rendre des membres constants :
class Matrix { public: int** rows; const int width; const int height; Matrix(int m, int n) : width(n), height(m) { rows = new int*[m]; for (int i=0; i<m; i++) { rows[i] = new int[n]; } } ~Matrix() { for (int i=0; i<height; i++) { delete[] rows[i]; } delete[] rows; } };
Le constructeur me sort une erreur de segmentation au moment d'instancier rows. Vous savez d'où ça peut venir ?
Merci d'avance ;)
A voir également:
- [C++] tableau 2D alloué dynamiquement
- Tableau word - Guide
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Exemple tableau croisé dynamique télécharger - Télécharger - Tableur
1 réponse
En attendant j'ai trouvé une solution de rechange en « aplatissant » rows :
Ça demande juste un petit modulo pour simuler les colonnes de la matrice.
Mais pas plus que je comprends pourquoi ça ne marche pas là-haut, je ne comprends pourquoi ça marche ici ! xD
// déclaration : int* rows; // construction : rows = new int[n*m]; // destruction : delete[] rows;
Ça demande juste un petit modulo pour simuler les colonnes de la matrice.
Mais pas plus que je comprends pourquoi ça ne marche pas là-haut, je ne comprends pourquoi ça marche ici ! xD