Matrice avec double pointeur
Résolu
fat cat
-
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;
}
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:
- Matrice avec double pointeur
- Double ecran - Guide
- Whatsapp double sim - Guide
- Double driver - Télécharger - Pilotes & Matériel
- Double appel - Guide
- Pointeur souris - Guide
2 réponses
Salut.
je ne suis pas sur que ça vienne de là, mais ton destructeur n'est pas très propre :
Sinon, je ne vois pas d'erreur dans ton code.
le constructeur serai un peu mieux ainsi :
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.
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.