1 pièce(s) jointe(s)
Manipulation d'objet / de pointeurs
Bonjour,
J'éprouve un problème avec la manipulation d'objets. Je pensais avoir plutôt bien compris les concepts des objets, et des pointeurs en C++, mais il y a manifestement quelque chose qui m'échappe. Le problème n'est pas à la compilation, mais à l'exécution (segmentation fault).
D'abord, je situe le contexte. Il s'agit d'un programme où je manipule des formes géométriques. J'ai créé une classe coord, qui contient une coordonnée, et une classe rectangle, qui contient les 4 coordonnées des coins, et celle du "centre".
Une méthode getCenter() calcule le centre sur base d'une moyenne des coordonnées des côtés. Elle renvoie un pointeur vers une coordonnées. C'est dans cette méthode qu'il y a un problème.
Un peu de code valant mieux qu'un long discours, le voici. Je ne mets pas les #include ni les fichiers d'en-tête car je suis à 99,9% certain qu'ils sont bons...
La classe coord:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| /* Constructeur: initialisation à 0 par défaut */
coord::coord(){
int x = 0;
int y = 0;}
coord::coord(int i, int j){
x = i;
y = j;}
int coord::X(){
return x;}
int coord::Y(){
return y;}
void coord::setX(int n){
x = n;}
void coord::setY(int n){
y = n;
} |
La classe rectangle:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| rectangle::rectangle(){
coord* c = new coord();
coord* coin1 = new coord();
coord* coin2 = new coord();
coord* coin3 = new coord();
coord* coin4 = new coord();
}
coord* rectangle::getCenter(){
int xCenter = coin1->X() + coin2->X() + coin3->X() + coin4->X();
int yCenter = coin1->Y() + coin2->Y() + coin3->Y() + coin4->Y();
cout<<endl<<"Ici ca va"<<endl;
c->setX(5);
cout<<endl<<"Ici ca va plus... "<<endl;
c->setY(yCenter);
return c;
}
void rectangle::setCoord(coord* c1, coord* c2, coord* c3, coord* c4){
coin1 = c1;
coin2 = c2;
coin3 = c3;
coin4 = c4;
} |
Le fichier main.cpp:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| int main(){
coord* c1 = new coord(1, 1);
coord* c2 = new coord(1, 4);
coord* c3 = new coord(5, 1);
coord* c4 = new coord(5, 4);
rectangle* rect = new rectangle();
rect->setCoord(c1, c2, c3, c4);
coord* centre = rect->getCenter();
} |
Comme vous le voyez, je crée 4 pointeurs vers des coordonnées. Ensuite, je crée un rectangle, et je lui assigne les coins.
Puis je veux récupérer son centre.
Le problème se situe à la ligne "c->setX(5);" (j'imprime des petits commentaires de débuggage. Vous verrez que c'est entre les 2 que ça plante).
D'avance, merci beaucoup pour votre aide!
PS: Je rajoute en attach un ZIP du code source, avec les en-têtes, (et qui compile...)