[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   -
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 :

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:

1 réponse

Groarh Messages postés 682 Date d'inscription   Statut Membre Dernière intervention   185
 
En attendant j'ai trouvé une solution de rechange en « aplatissant » rows :

// 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
0