Matrice avec double pointeur

Résolu
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;
}

2 réponses

  1. Merci beaucoup char sniper. Je n'ai effectivement pas fait attention à la déclaration de m_vecteur dans mon constructeur.
    0
    1. Contributeur
      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