Matrice avec double pointeur

Résolu
fat cat -  
 fat cat -
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. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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
  2. fat cat
     
    Merci beaucoup char sniper. Je n'ai effectivement pas fait attention à la déclaration de m_vecteur dans mon constructeur.
    0