begin process at 2012 05 29 08:30:26
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

erreur "Segmentation fault" en C++


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

erreur "Segmentation fault" en C++

jeudi 22 avril 2004 à 15:18:14 | erreur "Segmentation fault" en C++

antgre

Bonjour a tous,

Je travaille sur un programme dont une partie doit implementer une liste de points.
Chaque point comprenant un certain nombre de caractéristiques.

Ma classe point marche très bien.

J'ai ensuite créé une classe list qui represente une liste d'objet T (template)

et enfin, j'ai créé une classe Pointlist qui crée des liste de points.

j'arrive (apres nombreux preoblèmes ;) ) à compiler ... Et quand je lance mon programme de test, j''obtiens
"Segmentation fault"

Je vous mets mes classes .h et .cpp ...

Merci d em'aider si vous avez quelques minutes


point.h


/* MISE A JOUR : 17/04/2004 18h19
PAR : Ant
*/

#ifndef point_h
#define point_h
/*
@ author: Delmoitié Damien
Grenier Antoine
Rahier Benjamin
@ date : Mars 2004
classe définissant les méthodes de la classe point.cpp
*/


class point
{
public:
point(double x, double y, double u, double v);
point();
void setX (double n);
void setY (double n);
void setU (double n);
void setV (double n);
void set(double x, double y, double u, double v);
double getX ();
double getY ();
double getU ();
double getV ();
double getVIT ();
double getDIST (point P);
double getDIST (double x, double y);

private:
double X;
double Y;
double U;
double V;
double VIT;
double DIST;

};

#endif



______________________________________________________________________

point.cpp


/* MISE A JOUR : 22/04/2004 15h02
PAR : Ant
REM : separation de la classe de test
*/


/*
@ author: Grenier Antoine
Delmoitie Damien
Rahier Benjamin
@ date : Mars 2004
classe permettant la gestion de differents points qui contiennent positions et vitesses
*/

#include "point.h"
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>

//Constructeur avec données
point::point(double x, double y, double u, double v){
X = x;
Y = y;
U = u;
V = v;
};

//Constructeur sans donnée
point::point(){
// initialisation d'1 point (0,0) �une vitesse (0,0)
X = 0.0;
Y = 0.0;
U = 0.0;
V = 0.0;
};


// Definir la position en X
void point::setX (double n){
X = n;
};

// Definir la position en Y
void point::setY (double n){
Y = n;
};

// Definir la vitesse U
void point::setU (double n){
U = n;
};

// Definir la vitesse V
void point::setV (double n){
V = n;
};

//définir la position et les vistesses en une fois pour Damien
void point::set(double x, double y, double u, double v){
X = x;
Y = y;
U = u;
V = v;
};

// renvoit la position en X
double point::getX (){
return X;
};

// renvoit la position en Y
double point::getY (){
return Y;
};

// renvoit la vitesse U
double point::getU (){
return U;
};

// renvoit la vitesse V
double point::getV (){
return V;
};

// renvoit la vitesse moyenne
double point::getVIT (){
VIT = sqrt(pow(U,2) + pow(V,2));
return VIT;
};


//renvoit la distance entre deux points
double point::getDIST (point P){
DIST=sqrt(pow(X-P.getX(),2) + pow(Y-P.getY(),2));
return DIST;
};

//renvoit la distance entre un point et une position
double point::getDIST (double x, double y){
DIST=sqrt(pow(X-x,2) + pow(Y-y,2));
return DIST;
};



______________________________________________________________________

list.h


/* MISE A JOUR : 17/04/2004
PAR : Ant
QUOI : compris un peu
*/

#ifndef list_h
#define list_h

/*
@ author: Delmoitie Damien
Grenier Antoine
Rahier Benjamin
@ date : Mars 2004
classe permettant la gestion d'une structure de donn? de type liste et
utilisant la classe template.
*/

#include <iostream>

using namespace std;

template <class T>
class list
{
public: list();
~list();
bool add(T *ele);
T *remove();
void next();
void setElement(T *ele);
T *getCurrent();
int getLength()const;
bool isEmpty() const;
bool isOk() const;
bool isFirst();
bool isEnd() const;
void setFirst();

private:

//d?inition d'une structure des maillons "NOEUDS" de la list
typedef struct NOEUD{
struct NOEUD *next;
T *element;
}Node;

Node *head;
Node *tail;
Node *current;


};



// CONSTRUCTEUR
template <class T>
list<T>::list(){
head = current = tail = new Node;
head->next = NULL;
current->next = NULL;
tail->next = NULL;
};

// DESTRUCTEUR
template <class T>
list<T>::~list(){
setFirst();
while(!isEmpty()){
Node *del;
del=current->next;
current->next=del->next;
delete del;
}
delete head;
delete tail;
delete current;
}

//Ajoute un element dans la liste
template <class T>
bool list<T>::add(T *ele){
bool isFail = (current == NULL);
if (current!=NULL){
Node *pro;
pro = new Node;
pro->next = current->next;
pro->element = ele;
current->next= pro;
if (tail == current)tail=current->next;
}
return isFail;
};

//verifie que current ne Te pas vers un element NULL
template <class T>
bool list<T>::isOk() const{
return current != NULL && current->next != NULL;
};

//supprime current de la liste et renvoie l'element contenu dans le noeud
template <class T>
T *list<T>:: remove(){
T *rem = NULL;
if (isOk()){
rem = current->next->element;
Node *remo=current->next;
current->next=remo->next;
if (tail == remo) {
tail = current;
}
delete remo;
}
return rem;
};

//place current sur le noeud suivant
template <class T>
void list<T>::next(){
if (current!= NULL){
current = current->next;
}
};


template <class T>
void list<T>::setElement(T *ele){
if(isOk()){
current->next->element = ele;
}
};

//retourne l'element qui se trouve dans le noeud apres current
template <class T>
T *list<T>::getCurrent(){
T *el=NULL;
if (isOk()){
el=current->next->element;
}
return el;
};

//Retourne la longueur de la liste
template <class T>
int list<T>::getLength()const{
int counter = 0;
Node *temp;
temp = head;
while(temp->next != NULL){
counter++;
temp = temp->next;
}
return counter;
};


//Verifie que la liste n'est pas vide
template <class T>
bool list<T>::isEmpty() const{return head->next == NULL;};

//Verifie que l'element n'est pas le dernier
template <class T>
bool list<T>::isEnd() const{return current->next == NULL;};

//Verifie que l'element n'est pas le permier
template <class T>
bool list<T>::isFirst() {return current->next->next == NULL;};

//Definit le premier element
template <class T>
void list<T>::setFirst(){current = head;};

#endif



______________________________________________________________________


Pointlist.h


/* MISE A JOUR : 19/04/2004
PAR : Ant
*/

#ifndef Pointlist_h
#define Pointlist_h
/*
@ author: Delmoitie Damien
Grenier Antoine
Rahier Benjamin
@ date : Mars 2004
classe permettant de cr�r une liste de points
*/

#include "list.h"
#include "point.h"
#include <iostream>

//typedef list<point> listPoint;

class Pointlist : public list<point>
{
public:
Pointlist();
~Pointlist();
void Pointlist::trier(double x, double y);

private:
Pointlist *LISTE;

};

#endif



______________________________________________________________________



Pointlist.cpp


/* MISE A JOUR : 22/04/2004 15h02
PAR : Ant
REM : separation de la classe de test
*/

/*
@ author: Delmoitie Damien
Grenier Antoine
Rahier Benjamain
@ date : Mars 2004
classe permettant de créer une liste de points
*/

#include <iostream>
#include "Pointlist.h"
#include "list.h"
#include "point.h"


//définition d'une liste contenant des points
//typedef list<point> listPoint;

//constructeur
Pointlist::Pointlist(){
LISTE = new Pointlist();
}

//destructeur
Pointlist::~Pointlist(){
delete LISTE;
}


// void Pointlist::add(point P){
// LISTE->add(P);
// }

//Trie la liste de l'element le plus proche en fonction d'une position
void Pointlist::trier(double x, double y){

cout << "tri de la liste...";

// Initialisation
Pointlist *L =new Pointlist();
point *p1 = new point();
point *p2 = new point();
bool etat;

L->add(LISTE->getCurrent());
LISTE->next();

while(LISTE->isOk()){
p1=LISTE->getCurrent();
p2=L->getCurrent();
etat=0;
while((L->isOk()) & (etat=0)){
//Comparaison des distances
if (p1->getDIST(x,y)<p2->getDIST(x,y)){
L->setElement(p1);
etat=1; }
L->next();
};
LISTE->next();
};
*LISTE=*L;
}




______________________________________________________________________


Et enfin ... La classe de test ...


//CLASSE DE TEST

/* MISE A JOUR : 22/04/2004
PAR : Ant
*/

/*
@ author: Delmoitie Damien
Grenier Antoine
Rahier Benjamain
@ date : Mars 2004
classe permettant de créer une liste de points
*/

#include <iostream>
#include "Pointlist.h"
#include "list.h"
#include "point.h"

int main() {

Pointlist *L1 = new Pointlist();

point *P = new point();
point *P1 = new point(0.0,0.0,0.0,0.0);
point *P2 = new point(1.0,1.0,0.0,0.0);
point *P3 = new point(2.0,2.0,0.0,0.0);
point *P4 = new point(3.0,2.0,0.0,0.0);
point *P5 = new point(6.0,3.0,0.0,0.0);

bool a = L1->isOk();

L1->add(P1);
L1->add(P2);
L1->add(P3);

double d = L1->getLength();

P->setX(L1->getCurrent()->getX());
double b = P->getX();

L1->remove();
P->setX(L1->getCurrent()->getX());
double c = P->getX();

L1->add(P4);
L1->add(P5);

L1->trier(3.0,3.0);

cout<< "|---------------------|" << endl;
cout<< "| TEST CLASSE LIST : |" << endl;
cout<< "|---------------------|" << endl;
cout<< "| Fonction isOk() |" << endl;
cout<< "ca doit Afficher 0 " << endl;
cout<< a << endl;
cout<< "| Fonction add() |" << endl;
cout<< " ca doit Afficher 2" << endl;
cout<< b << endl;
cout<< "| Fonction remove() |" << endl;
cout<< " ca doit Afficher 1" << endl;
cout<< c << endl;
cout<< "| Fonction getLength() |" << endl;
cout<< " ca doit Afficher 3" << endl;
cout<< d << endl;
cout<< "|---------------------|" << endl;
cout<< "|FIN DU TEST : bravo !|" << endl;
cout<< "|---------------------|" << endl;

return 1;
};



______________________________________________________________________

jeudi 22 avril 2004 à 17:06:23 | Re : erreur

vecchio56

Administrateur CodeS-SourceS
Pointlist.cpp:

Pointlis::Pointlist(){
LISTE = new Pointlist();
}

Ton constructeur par défaut de Pointlist est récursif!


Cette discussion est classée dans : liste, double, list, next, current


Répondre à ce message

Sujets en rapport avec ce message

erreur dans la fonction d'impression [ par dark_cross ] voici j'ai une erreur dans ma fonction d'impression si quelqu'un peux m'expliquer, je serais tres ravie.#include #include //speciale dedicasse Etienne HELP !!! (liste ...) [ par antgre ] Bonjour,J'essaye de creer une liste chainee contenant des objet point (que g definis dans une autre classe qui a ete testee et qui marche) ... Quand j va_list [ par garslouche ] Salut à tous,je voudrais faire un truc idiot mais c juste pour un test : je voudrais faire une fonction myprintf qui fasse comme printf (en utilisant Comment afficher la liste des fichiers dans le composant List View [ par kanimana ] Bonjour Svp, indiquez moi la fonction qui permettera d'afficher les fichier contenu dans un répertoire dans le composant ListView, avec les détails Violation d'accès lors de la lecture de l'emplacement 0x00000000. [ par d0jones ] bonjour, j'ai un petit souci, quand j'essai d'accéder à la donnée de ma struct j'ai le message suivant : Exception non gérée à 0x01202029 dans ListTe List de l'aide svp [ par silverfr78021959 ] Bonjour voilà je dois créer une liste et de la en faire l'affichage, mais cette affichage doit être fait particulierement. Je m'explique je voudrais a aide s.v.p [ par nimaly ] salut j'ai besoin de vous aide s.v.p pour corriger cet erreur( juste une seule erreur),j'aime savoir sa signification [code=cpp] //* La fonction cl STD::list, un problème lors de l'utilisation d'attributs de type liste dans un objet stockée dans un tableau ou vector [ par mohamed_bn ] Bonjour, J'ai une structure comme suit: [color=red]typedef struct DataFlow : public cObject { std::list receivedPackets; int numberOfPacketsNotYet Fusion de cellules pour une liste chainée [ par ouhare ] Bonjour tout le monde. J'aurais une question concernant une fonction en C que j'appelerais merge_list(). Cette fonction est supposée fusionner 2 cellu


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,217 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales