#1 Le 14/04/2010, à 19:45
- astroOo
[résolu]g++ et appel du destructeur
Bonjour
J'ai créé une classe avec son constructeur et son destructeur que j'ai compilé avec g++.
J'exécute ensuite un petit programme qui cré cette classe puis se termine.
Lorsque je test la présence de fuite mémoire avec valgrind, il m'indique qu'il y en a. Cependant lorsque je fais un appel explicite au destructeur dans mon petit programme, valgrind ne m'indique plus de fuite mémoire.
J'ai lu que c'était au compilateur de faire cet appel au destructeur, donc je ne comprends pas pourquoi je dois le faire.
Voici mon makefile, je m'y suis peut-être trompé
all: cavalier
cavalier: main.o enigmeCavalier.o
g++ -o cavalier enigmeCavalier.o main.o
main.o: main.cpp enigmeCavalier.h
g++ -c main.cpp
enigmeCavalier.o: enigmeCavalier.cpp enigmeCavalier.h
g++ -c enigmeCavalier.cpp
Merci d'avance
Dernière modification par astroOo (Le 14/04/2010, à 23:03)
Hors ligne
#2 Le 14/04/2010, à 21:43
- Le Farfadet Spatial
Re : [résolu]g++ et appel du destructeur
Salut à tous !
Difficile de dire quoique ce soit sans le code. Donc : poste ton code, s'il-te-plaît.
À bientôt.
Le Farfadet Spatial
Hors ligne
#3 Le 14/04/2010, à 21:56
- delphinus
Re : [résolu]g++ et appel du destructeur
Salut,
Pour répondre à ta question principale: ton makefile est correct.
Pour la suite, je dirai comme Le Farfadet Spatial: faut voir le code.
a+
Hors ligne
#4 Le 14/04/2010, à 22:23
- astroOo
Re : [résolu]g++ et appel du destructeur
Le voilà
enigmeCavalier.h
#ifndef ENIGMECAVALIER_H_
#define ENIGMECAVALIER_H_
/**
* @brief class enigme cavalier
* cette classe permet de résoudre l'énigme du cavalier
*/
class EnigmeCavalier {
public:
/**
* constructeur
* param[in] x : l'abscisse du placement initial du cavalier
* param[in] y : l'ordonnée du placement initial du cavalier
* param[in] largeur : largeur du plateau de jeu
* param[in] hauteur : hauteur du plateau de jeu
*/
EnigmeCavalier(int x, int y, int largeur, int hauteur);
/**
* Destructeur
*/
~EnigmeCavalier();
private:
/*contient le chemin parcouru*/
int* chemin;
bool** damier;
/* hauteur du damier */
int hauteur_;
/* largeur du damier */
int largeur_;
/*abscisse courante*/
int x_;
/*ordonnée courante*/
int y_;
};
#endif /*ENIGMECAVALIER_H_*/
enigmeCavalier.cpp
#include <iostream>
#include "enigmeCavalier.h"
EnigmeCavalier::EnigmeCavalier(int x, int y, int largeur, int hauteur){
x_ -= x;
y_ -= y;
/*-2 car une position a déjà été occupée*/
chemin = new int [largeur*hauteur*2+1-2];
/*la premier champs contiendra le champs suivant la dernière position insérée*/
chemin[0] = 1;
damier = new bool* [largeur];
for(unsigned int i = 0; i < largeur; ++i){
damier[i] = new bool[hauteur];
}
/*initialisation du damier*/
for(unsigned int i = 0; i < largeur; ++i){
for(unsigned int j = 0; j < hauteur; ++j){
/*la case n'a pas été jouée*/
damier[i][j] = false;
}
}
hauteur_ = hauteur;
largeur_ = largeur;
}
EnigmeCavalier::~EnigmeCavalier(){
/* désallocation du damier */
for(unsigned int i = 0; i < largeur_; ++i){
delete [] damier[i];
}
delete [] damier;
/* désallocation du chemin */
delete [] chemin;
}
main.cpp
#include "enigmeCavalier.h"
int main(int argc, char *argv[]){
EnigmeCavalier enigme(1,1,2,3);
//enigme.~EnigmeCavalier();
return 0;
}
Merci de votre aide
Dernière modification par astroOo (Le 17/04/2010, à 19:04)
Hors ligne
#5 Le 14/04/2010, à 23:03
- astroOo
Re : [résolu]g++ et appel du destructeur
J'ai désinstallé les paquets gpp et g++, puis j'ai réinstallé le paquet g++. Maintenant le compilateur fait bien appel au destructeur.
Désolé j'aurais dû essayer cette méthode plus tôt. Bonne soirée.
Hors ligne