[C++] tableau 2D alloué dynamiquement

Fermé
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 - 15 déc. 2009 à 17:39
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 - 15 déc. 2009 à 18:51
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 ;)

1 réponse

Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
15 déc. 2009 à 18:51
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