C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Probleme de Segmentation Fault apres avoir executer deux foi

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Florian
Guest





PostPosted: Fri Mar 04, 2005 5:04 pm    Post subject: Probleme de Segmentation Fault apres avoir executer deux foi Reply with quote



Bonjour

J'ai un soucis,
mon code compile
cependant j'ai un gros soucis à l'éxecution
je l'execute 2 fois de suite ca marche sans probleme
mais au 3 eme lancements, il finit par un segmentation fault.
j'ai utilisé gdb et Kgdb il me dise bien ou est la segmentation fault
mais je ne vois pas ou!
Ca me lourde car je ne vois pas d'ou ca viens ca fait 5 jours que je
cherche et je ne vois pas d'ou ca viens.
Est ce que vous pouvez me dire qu'elle peut etre la raison de ce probleme?

je fille mon code pour montrée ce que je fait

Merci de m'aider


# AUTOMATIC UPDATE of dependencies (SunOS seulement)
..KEEP_STATE:


# nom de l'executable a creer
#
EXEC = evolution_souris


# noms des fichiers binaires necessaires pour creer $EXEC
#
OBJS = souris.o naissance.o appariement.o main.o ecriture_donee.o

# exemple plus complique:
# OBJS = slidemaker.o toto.o truc.o muche.o


###########################################

# compilateur C++
# NB: certaines configs utilisent la macro CXX, d'autres CCC
# => on initialise donc les deux
#
CXX= g++
CCC= ${CXX}


# options du compilateur C++
# NB1: meme remarque, il vaut mieux initialiser CXXFLAGS et CCFLAGS
# NB2: -g permet de debugger, -O optimise; -Wall affiche les erreurs
#
CXXFLAGS= -g
CCFLAGS= ${CXXFLAGS}


# options de l'editeur de liens
#
LDFLAGS=


# librairies a utiliser
#
LDLIBS=


# un exemple plus complique specifiant ou chercher les headers
# et les librairies necessaires pour l'edition de liens
#
# CXXFLAGS= -g -Wall -I/usr/local/qt/include
# CCFLAGS= ${CXXFLAGS}
# LDLIBS = -L/usr/local/qt/lib -lqt


##########################################
#
# Regles pour ce repertoire

default: $(EXEC)

$(EXEC): $(OBJS)
$(CCC) $(CCFLAGS) $(LDFLAGS) -o $@ $(OBJS) ${LDLIBS}

install:
-@cp -p -f $(EXEC) $(DESTBIN)

clean:
-@$(RM) $(EXEC) $(OBJS) core 1>/dev/null 2>&1


###########################################
#
# Regles implicites

..SUFFIXES: .cpp .cxx .cc .C .c

..cpp.o:
$(CXX) -w -c $(CXXFLAGS) $(INCPATH) -o $@ $<

..cxx.o:
$(CXX) -w -c $(CXXFLAGS) $(INCPATH) -o $@ $<

..cc.o:
$(CXX) -w -c $(CXXFLAGS) $(INCPATH) -o $@ $<

..C.o:
$(CXX) -w -c $(CXXFLAGS) $(INCPATH) -o $@ $<

..c.o:
$(CC) -w -c (CFLAGS) $(INCPATH) -o $@ $<

#titre
set title "evolution de la population de souris"
plot "nombre_souris.txt" using 1:2 title "souris male noir" with lines,
"nombre_souris.txt" using 1:3 title "souris femelle noir" with lines,
"nombre_souris.txt" using 1:4 title "souris mal blanche" with lines, "nombre_souris.txt" using 1:5 title "souris femelle blanche" with lines,
"nombre_souris.txt" using 1:6 title "souris mal grise" with lines, "nombre_souris.txt" using 1:7 title "souris mal grise" with lines

pause -1

plot "nombre_souris.txt" using 1:8 title "nombre de souris total" with lines

pause -1

set title "evolution de la population de souris"
plot "nombre_souris.txt" using 1:9 title "% souris noir" with lines,
"nombre_souris.txt" using 1:10 title "% souris blanche" with lines,
"nombre_souris.txt" using 1:11 title "% souris grise" with lines

pause -1
Back to top
Ahmed MOHAMED ALI
Guest





PostPosted: Mon Mar 07, 2005 11:58 am    Post subject: Re: Probleme de Segmentation Fault apres avoir executer deux Reply with quote



Salut,
A mon avis,ton problème vient du pointeur renvoyé par getConjoint() qui ne
désigne pas forcément une adresse correcte (en tout cas,je ne vois pas ce
qui le garanti dans ton code) de plus tu ne le testes même pas.
Initialise le membre conjoint de souris dans le constructeur
souris::souris(int S,int C): conjoint(0) { ...}
Partout où tu utilises getConjoint() compare le pointeur renvoyé à 0 avant
de le déréférencer.Fais de même avec tous les pointeurs que tu utilises dans
ton code.

J'espère que cela t'aidera à résoudre ton bug.
Ahmed MOHAMED ALI


"Florian" <florian.morineau2 (AT) 9online (DOT) fr> wrote

Quote:
Bonjour

J'ai un soucis,
mon code compile
cependant j'ai un gros soucis à l'éxecution
je l'execute 2 fois de suite ca marche sans probleme
mais au 3 eme lancements, il finit par un segmentation fault.
j'ai utilisé gdb et Kgdb il me dise bien ou est la segmentation fault
mais je ne vois pas ou!
Ca me lourde car je ne vois pas d'ou ca viens ca fait 5 jours que je
cherche et je ne vois pas d'ou ca viens.
Est ce que vous pouvez me dire qu'elle peut etre la raison de ce probleme?

je fille mon code pour montrée ce que je fait

Merci de m'aider



----------------------------------------------------------------------------
----


Quote:

# AUTOMATIC UPDATE of dependencies (SunOS seulement)
.KEEP_STATE:


# nom de l'executable a creer
#
EXEC = evolution_souris


# noms des fichiers binaires necessaires pour creer $EXEC
#
OBJS = souris.o naissance.o appariement.o main.o ecriture_donee.o

# exemple plus complique:
# OBJS = slidemaker.o toto.o truc.o muche.o


###########################################

# compilateur C++
# NB: certaines configs utilisent la macro CXX, d'autres CCC
# => on initialise donc les deux
#
CXX= g++
CCC= ${CXX}


# options du compilateur C++
# NB1: meme remarque, il vaut mieux initialiser CXXFLAGS et CCFLAGS
# NB2: -g permet de debugger, -O optimise; -Wall affiche les erreurs
#
CXXFLAGS= -g
CCFLAGS= ${CXXFLAGS}


# options de l'editeur de liens
#
LDFLAGS=


# librairies a utiliser
#
LDLIBS=


# un exemple plus complique specifiant ou chercher les headers
# et les librairies necessaires pour l'edition de liens
#
# CXXFLAGS= -g -Wall -I/usr/local/qt/include
# CCFLAGS= ${CXXFLAGS}
# LDLIBS = -L/usr/local/qt/lib -lqt


##########################################
#
# Regles pour ce repertoire

default: $(EXEC)

$(EXEC): $(OBJS)
$(CCC) $(CCFLAGS) $(LDFLAGS) -o $@ $(OBJS) ${LDLIBS}

install:
-@cp -p -f $(EXEC) $(DESTBIN)

clean:
-@$(RM) $(EXEC) $(OBJS) core 1>/dev/null 2>&1


###########################################
#
# Regles implicites

.SUFFIXES: .cpp .cxx .cc .C .c

.cpp.o:
$(CXX) -w -c $(CXXFLAGS) $(INCPATH) -o $@ $

.cxx.o:
$(CXX) -w -c $(CXXFLAGS) $(INCPATH) -o $@ $

.cc.o:
$(CXX) -w -c $(CXXFLAGS) $(INCPATH) -o $@ $

.C.o:
$(CXX) -w -c $(CXXFLAGS) $(INCPATH) -o $@ $

.c.o:
$(CC) -w -c (CFLAGS) $(INCPATH) -o $@ $



----------------------------------------------------------------------------
----


Quote:
#include"appariement.h"

int trouve_mal_non_apparier(vector<souris> SM)
{

for(int i=0;i<SM.size();i++)
{
if (SM.at(i).iscouple()==0) return(i);

}
return(-1);
}
void apparier(vector {
int i;
int j;


j=(int)rand()%SM.size();
for(i=0;i<SF.size();i++)
{

j=trouve_mal_non_apparier(SM);
if(j!=-1)
{
mal_cherche_femmelle(SM.at(j),SF.at(i));
}
}

}

void creationcouple(souris &S1,souris &S2)
{
S1.couple(S2);
S2.couple(S1);
};

void mal_cherche_femmelle(souris &M,souris &F)
{

int k;
// int it=0;

// chercher si les hommes sont en en couple,
//si il ne sont pas en couple, si l'age est >5 mois, il peut rechercher
une femme dans le vecteur de femmes qui ne soit pas en couple et que l'age

est >5 mois.
Quote:

if(M.getage()>20)
{ // chaque fois qu'un homme n'a pas de conjoint il cherche une
femelle non apparié
if(M.iscouple()==0)
{
if(F.getage()>20)
{

creationcouple(F,M);
F.nest_plus_gestation();
}

}
}
// parcourir le tableau d'homme

}




----------------------------------------------------------------------------
----


Quote:
#include"souris.h"
#include<vector.h

int trouve_mal_non_apparier(vector void apparier(vector<souris>&,vector<souris>&);
void creationcouple(souris &,souris &);
void mal_cherche_femmelle(souris &,souris &);




----------------------------------------------------------------------------
----


Quote:
#include"ecriture_donee.h"


int compatage_souris(vector<souris> Sou,int Couleur)
{
int i,j=0;
for (i=0;i<Sou.size();i++)

if(Sou.at(i).getcoul()==Couleur)// && (Sou.at(i).is_not_mort()==0));
{
if(Sou.at(i).is_not_mort()==0)
{
j++;
}
}

return(j);
}

int comtages_souris_mort(vector {
int i,j=0;
for(i=0;i<Sou.size();i++)
{
if(Sou.at(i).is_not_mort()==1)
{
j++;
}

}
return(j);
}


void ecrire_fichier(ofstream &fichier,vector temps)
{
int k=compatage_souris(M,0)+compatage_souris(F,0)+compatage_souris(M,1)+
compatage_souris(F,1)+compatage_souris(M,2)+compatage_souris(F,2);
float m= comtages_souris_mort(M)+ comtages_souris_mort(F);
fichier < " "< " "< " "< fichier<<" "<<(compatage_souris(M,0)+compatage_souris(F,0))*100/k;
fichier<<" "<<(compatage_souris(M,1)+compatage_souris(F,1))*100/k;
fichier<<" "<<(compatage_souris(M,2)+compatage_souris(F,2))*100/k;
fichier<<" "<
cout< " "< " "< cout<<" "<<(float)(compatage_souris(M,0)+compatage_souris(F,0))*100.0/k;
cout<<" "<<(float)(compatage_souris(M,1)+compatage_souris(F,1))*100.0/k;
cout<<"
"<<(float)(compatage_souris(M,2)+compatage_souris(F,2))*100.0/k<<"

"<
Quote:

}




----------------------------------------------------------------------------
----


Quote:
#include"souris.h"
#include #include
int compatage_souris(vector int comtages_souris_mort(vector<souris>);

void ecrire_fichier(ofstream &,vector<souris>,vector<souris>,int);




----------------------------------------------------------------------------
----


Quote:
#titre
set title "evolution de la population de souris"
plot "nombre_souris.txt" using 1:2 title "souris male noir" with lines,
"nombre_souris.txt" using 1:3 title "souris femelle noir" with lines,
"nombre_souris.txt" using 1:4 title "souris mal blanche" with lines,
"nombre_souris.txt" using 1:5 title "souris femelle blanche" with lines,
"nombre_souris.txt" using 1:6 title "souris mal grise" with lines,
"nombre_souris.txt" using 1:7 title "souris mal grise" with lines

pause -1

plot "nombre_souris.txt" using 1:8 title "nombre de souris total" with
lines

pause -1

set title "evolution de la population de souris"
plot "nombre_souris.txt" using 1:9 title "% souris noir" with lines,
"nombre_souris.txt" using 1:10 title "% souris blanche" with lines,
"nombre_souris.txt" using 1:11 title "% souris grise" with lines

pause -1


----------------------------------------------------------------------------
----


Quote:
#include "naissance.h"
#include "appariement.h"
#include "ecriture_donee.h"



int main(void)

{
srand(time(NULL));
vector<souris> SM;
vector<souris> SF;
int t=0,i=0,j=0,t3;
vector<souris> P;
ofstream resultat("nombre_souris.txt",ios::out|ios::binary);

// definir un vecteur de souris mal
//definir un vecteur de souris femelle

souris SM1(0,0);
souris SF1(1,0);
SM.push_back(SM1);
SF.push_back(SF1);
souris SM2 (1,1);
souris SF2(0,1);

// fonction de recherche de souris
// fontion de naissance d'une porté souris
SM.push_back(SM2);
SF.push_back(SF2);



for(t=0;t<=128;t++)
{


apparier(SF,SM);
toutes_les_souris_naissances(SF,SM);
age_plus(SF);
age_plus(SM);
t3=t%12;
if((t3==0 && t!=0) || t==128 )
{
ecrire_fichier(resultat,SF,SM,t);
}


}
system("gnuplot evolution.gnu");

// boucle qui fait des enfants
resultat.close();
}



----------------------------------------------------------------------------
----


Quote:
#include "naissance.h"


vector {

vector <souris> Port;
souris *conj;
conj=F.getconjoint();
int k=(int)rand()%3+5;
for(int i=0;i<k;i++)
{
// cout<<"valeur de est en couple "< souris
E(F.gencouleur,F.getconjoint()->gencouleur,F,*F.getconjoint());
Port.push_back(E);
}


// cette fonction renvoi une porté d'une sourie femmelle, tirage
aléatoire d'une nombre d'enfant de la porté
//et elle tire au hasart et scanne un nombre de femme qui va procree
//elle crée les souris enfant qu'elle mets dans une portée
return(Port);
};

void naissance(vector<souris> &Femelle, vector<souris
&Male,vector {
for (int i=0;i<E.size();i++)
{
if(E[i].getsex()==1)
{

Femelle.push_back(E.at(i));
}
else if (E[i].getsex()==0)
{

Male.push_back(E.at(i));
}

}
}

// naissance de tous les enfants de chaques femmes qui peut mettre bas





void toutes_les_souris_naissances(vector &Male)
{
vector
int i;

int taille_vect_F=Femelle.size();
for(i=0;i< taille_vect_F ;i++)
{
if(
(Femelle.at(i).getage()==20)||(Femelle.at(i).get_age_gest()==11))
{
Femelle.at(i).nest_plus_gestation();
}


if ((Femelle.at(i).iscouple()==1) && (Femelle.at(i).getgestation()==0))
{
if(Femelle.at(i).is_not_mort()==0)
{
cout<<" souris "< Port=porte(Femelle.at(i));
naissance(Femelle,Male,Port);
Femelle.at(i).en_gestation();
//réecrire naissance pour pouvoir scanné le vecteur de vecteur
}
}
}

}



void age_plus(vector {
for(int i=0;i<S.size();i++)
{
S.at(i).ageplus();
}
};



----------------------------------------------------------------------------
----


Quote:
#include #include "souris.h"
#include


void naissance(vector void toutes_les_souris_naissances(vector<souris> &, vector<souris> &);
void age_plus(vector<souris>&);






----------------------------------------------------------------------------
----


Quote:

#include "souris.h"

souris ::souris(int S,int C)
{
sex=S; // 0 mal et 1 femelle
couleur=C; // 0 noir 1 blanc 2 gris
gencouleur[0]=C, gencouleur[1]=C;
age=0; // initialisation de l'age a 0 jours
mort=0;// vie =0 et mort =1
pere=NULL;
mere=NULL;
gest=-1;
durgest=0;
}
// construction d'une souris pour la naissance de souris

souris::souris(int Pe[2],int Me[2],souris &P, souris &M)
{
// naissance a -21 jours début de la porté
age=-3;
mort=0;
durgest=0;
gest=-1;
float x=((float)rand()/(RAND_MAX));
float y=((float)rand()/(RAND_MAX));
// tirage aléatoire du sex et de la couleur
if (x<0.5 && y<0.5)
{
gencouleur[0]=Pe[0];
gencouleur[1]=Me[0];
couleur=2;
}
else if (x<0.5 && y>0.5)
{
gencouleur[0]=Pe[0];
gencouleur[1]=Me[1];
couleur=Pe[0];

}
else if(x>0.5 && y<0.5)
{

gencouleur[0]=Me[0];
gencouleur[1]=Pe[1];
couleur=Me[0];
}
else
{
gencouleur[0]=Pe[1];
gencouleur[1]=Me[1];
couleur=2;
}

if ( x<0.5)
{sex=0;}
if (x>=0.5)
{sex=1;};

pere=&P;
mere=&M;

};

//methode
int souris::ageplus()
{
if (mort==0)
{
age=age+1;
if(gest==1)
{
durgest++;
}
}
mourir();

};

int souris::getcoul()
{
return(couleur);
}
void souris::couple(souris &M)
{
if(age>=20)
{
apariement=1;
conjoint=&M;
}
};
// cette méthode vérifie si la souris est en couple
int souris::iscouple()
{
if ( apariement==1) return(1);
return(0);
};

int souris::getgestation()
{
return(gest);

}

void souris::en_gestation()
{

gest=1;

//regarder dans le projet la duré de la gestation et à partir de quand
elle peut refaire une porté
}
void souris::nest_plus_gestation()
{
gest=0;
}

void souris::mourir()
{
if (age==72)
{
mort=1;
}
}
int souris::getage()
{
return(age);
};


int souris::getsex()
{
return(sex);
};

int souris::get_age_gest()
{
return(durgest);
}

int souris::ispere(souris &S)
{
if(pere == &S) return(true);
return(false);
};

int souris::ismere(souris &S)
{
if(mere == &S) return(1);
return(0);
};

// int souris::isconjoint(souris &S)
// {
// if(conjoint == &S) return(1);
// return(0);
// };



souris* souris::getconjoint()
{
return(conjoint);
};


int souris::is_not_mort()
{
return(mort);

}



----------------------------------------------------------------------------
----


Quote:
#ifndef souris_h
#define souris_h

#include #include #include


class souris
{
private :
int sex;
int couleur;
// age en semaine
int age;
int mort;
int apariement;
// gestation definit si la souris Femmelle peut faire ou pas des enfants
// si Ok 0 et Non 1
int gest;
int durgest;
souris *mere;
souris *pere;
souris *conjoint;

public :
int gencouleur[2];
souris();
souris(int,int);
souris(int*,int*,souris&, souris&);
~souris(){};
void couple(souris&);
void mourir();
int getgestation();
void changestategestation();
int iscouple();
int ageplus();
int getage();
int get_age_gest();
int is_not_mort();
void nest_plus_gestation();
void en_gestation();

// methode le la souris à couplé en dessout
int getsex();
int getcoul();
int ispere(souris&);
int ismere(souris&);
int isconjoint(souris&);
souris* getconjoint();

};
#endif




Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.