Probleme à l'execution

Résolu
jimdano Messages postés 16 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 20 mars 2013 - 15 oct. 2011 à 14:29
jimdano Messages postés 16 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 20 mars 2013 - 17 oct. 2011 à 15:54
Bonjour,

Je cherche a "jouer" avec des points, paramètres : abscisses (getX(), setX()) et ordonnées(getY(),setY()).

J'ai une classe "nuage de points qui crée un tableau de points.
Je suis en train d'essayer de surcharger l'opérateur "+" en ajoutant un point à mon nuage de points.

j'ai un problème à l’exécution d'un programme et je ne trouve pas de solution...

Voici un bout de code de NuageDePoints.cpp

#include "NuageDePoints.h"
// on cree un certain nombre de points ayant des valeurs sans importances
NuageDePoints :: NuageDePoints(int nbre){
m_nbre = nbre;
int i = 0;
bool identique = false;
        // un nuage de point étant un tableau de points
m_tab = new Point[nbre];
if ( nbre > 0){
// pour prendre des nombres au hasard...
m_tab[0] =  Point((int)getRand(),(int)getRand());
} else {
cout << "le nombre est < 1" << endl;
}
if (nbre > 1){
while (i!=nbre-1){
m_tab[i] = Point((int)getRand(),(int)getRand());
i++;
while(!identique){
m_tab = pointIdentique(nbre, m_tab);
identique = 1;
}
}
}
}

NuageDePoints :: NuageDePoints(Point* tab,int nbre){
m_tab = tab;
m_nbre = nbre;
}

Point* NuageDePoints :: pointIdentique(int nbre, Point* tab){
m_tab = tab;
m_nbre = nbre;
int i; int j;
for(i=0;i<nbre-1;i++){
for(j=0;j<nbre-1;j++){
if(j!=i){
while(tab[i].getX() == tab[j].getX() && tab[i].getY() == tab[j].getY()){
m_tab[i].setX(getRand());
cout << getRand()<<endl;
m_tab[i].setY(getRand());
}
}
}
}
return m_tab;
}

// la ca bug ....
NuageDePoints NuageDePoints :: operator+(Point a){

int x = getNbre();
Point* tab = new Point[x+1];
for(int i =0; i<x; i ++){
tab[i].setX(getTab()[i].getX());
tab[i].setY(getTab()[i].getY());
}
tab[x].setX(a.getX());
tab[x].setY(a.getY());
NuageDePoints np = NuageDePoints(tab,m_nbre+1);
return np;
}

// et le main ...
#include "Point.h"
#include "NuageDePoints.h"

int main(){

Point p = Point();
Point p2 = Point(3,5);
Point p3 = Point(&p2);
NuageDePoints n = NuageDePoints(2);

Point* tab = new Point[10];
NuageDePoints n2 = NuageDePoints(tab,2);
        //je test mon operator+
        n = n2 + p2
n2.affiche();
system("pause");
return 0;
}


Merci d'avance !
Jimmy

3 réponses

cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 1
16 oct. 2011 à 13:06
Salut, en faisant
int x = getNbre();
Point* tab = new Point[x+1];

n'oublie pas que tu recrée un tableau vide !
En plus, l'ancien point[] reste en mémoire et ce n'est pas propre car la quantité de mémoire augmentera à chaque appel de l'op +
3
pop70 Messages postés 181 Date d'inscription mardi 6 avril 2010 Statut Membre Dernière intervention 7 janvier 2012 10
15 oct. 2011 à 18:29
Salut,

En remplaçant :
NuageDePoints NuageDePoints :: operator+(Point a){

Par :
NuageDePoints NuageDePoints :: operator+(const Point &a){

et idem dans le header, est-ce que ça marche ?

Sinon essaye d'executer cette fonction ligne après ligne (en mettant les suivantes en commentaires) pour voir précisément celle qui pose problème.


C++dialement,

Pop70
0
jimdano Messages postés 16 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 20 mars 2013
17 oct. 2011 à 15:54
int x = np2.getNbre();
Point* tab = np2.getTab();
NuageDePoints np = NuageDePoints(tab,x+1);
tab[x] = p1;
np.setTab(tab);
return np;


merci, j'ai fait ca et ca marche désormais =)
0
Rejoignez-nous