Matrice avec double pointeur

Résolu/Fermé
fat cat - 7 mai 2010 à 01:58
 fat cat - 7 mai 2010 à 17:17
Bonsoir à tous,

J'ai un problème avec une classe Matrice que j'ai crée. Je gère les matrices avec des double pointeurs.

Dans mon main, je peux créer des matrices sans problème mais je n'arrive pas à me servir de get_cellule et set_cellule. Le projet compile mais quand je le lance j'ai le droit à un message d'erreur qui me dit:

Exception non gérée à 0x002f17bc dans Operations Matrices.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0xccccccd4.

Qqun peut il m'aider? J'ai regardé sur quelques forums et je n'ai rien trouvé. Je m'en remet donc maintenant à votre bon coeur.



main.cpp:

#include <cstdlib>
#include <iostream>
#include "Matrice.h"

using namespace std;

int main(int argc, char *argv[])
{
Matrice uneMatrice(3,3);
//uneMatrice.set_cellule(2,2,1);
cout << uneMatrice.get_cellule(2,2) << endl;


system("PAUSE");
return EXIT_SUCCESS;

}
Matrice.h:
class Matrice
{
private:

int m_nbLignes;
int m_nbColonnes;
double **m_vecteur;


public:

Matrice(int nbLignes, int nbColonnes);
~Matrice();

double get_cellule(int ligne, int colonne) const;
int get_nbLignes() const;
int get_nbColonnes() const;

void set_cellule(int ligne, int colonne, double valeur);


};

Matrice.cpp:
#include <cstdlib>
#include <iostream>
#include <math.h>

#include "Matrice.h"

Matrice :: Matrice(int nbLignes, int nbColonnes)
{
m_nbLignes = nbLignes;
m_nbColonnes = nbColonnes;

double **m_vecteur = new double *[nbLignes];

for (int i = 0; i < nbLignes; i++)
{
m_vecteur[i] = new double [nbColonnes];
}
}

Matrice :: ~Matrice()
{
for (int i = 0; i < m_nbLignes; i++)
{
delete m_vecteur[i];
}
}

double Matrice :: get_cellule(int ligne, int colonne) const
{
return m_vecteur[ligne][colonne];
}

int Matrice :: get_nbLignes() const
{
return m_nbLignes;
}

int Matrice :: get_nbColonnes() const
{
return m_nbColonnes;
}

void Matrice :: set_cellule(int ligne, int colonne,double valeur)
{
m_vecteur[ligne][colonne] = valeur;
}

A voir également:

2 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
7 mai 2010 à 09:29
Salut.
je ne suis pas sur que ça vienne de là, mais ton destructeur n'est pas très propre :
Matrice :: ~Matrice()
{
  for (int i = 0; i < m_nbLignes; i++)
  {
    delete [] m_vecteur[i];
  }
  delete [] m_vecteur;
} 

Sinon, je ne vois pas d'erreur dans ton code.
le constructeur serai un peu mieux ainsi :
Matrice :: Matrice(int nbLignes, int nbColonnes):
  m_nbLignes (nbLignes),
  m_nbColonnes ( nbColonnes)
  {

 m_vecteur = new (double*)[m_nbLignes];

  for (int i = 0; i < m_nbLignes; i++)
  {
    m_vecteur[i] = new double [m_nbColonnes];
  }
} 

D'ailleurs, en modifiant ton constructeur, j'ai trouvé l'erreur, c'est "double **" devant m_vecteur, tu déclares une variable locale qui viens masqué le membre de la classe.
0
Merci beaucoup char sniper. Je n'ai effectivement pas fait attention à la déclaration de m_vecteur dans mon constructeur.
0