Bonjour tout le monde,
Je fais des petits exos pour me remettre dans le bain du c++.
Et la, je sèche un peu.
J'ai un problème à la libération de la mémoire et je ne vois pas trop pourquoi.
[cpp]adherent.h
class adherent
{
char * nom;
char * prenom;
char * adresse;
int age;
//static int iden;
exemplaire * emprunt[3];
public:
adherent(char *,char *, char *, int);
adherent(const adherent &);
~adherent();
int emprunter(exemplaire &);
int restituer(exemplaire &);
};[/cpp]
[cpp]adherent.cpp
adherent::adherent(char * name, char * prename, char * adr, int old)
{
//id = 0;
int longueur,i;
longueur = strlen(name)+1;
nom = new char(longueur);
strcpy(nom,name);
longueur = strlen(prename)+1;
prenom = new char(longueur);
strcpy(prenom,prename);
longueur = strlen(adr)+1;
adresse = new char(longueur);
strcpy(adresse,adr);
age=old;
for(i=0;i<3;i++)
{
emprunt = 0;
}
//iden++;
}
// constructeur par recopie
adherent::adherent(const adherent & a)
{
int i,longueur;
longueur = strlen(a.nom)+1;
nom = new char[longueur];
for(i=0;i<longueur;i++)
{
nom=a.nom;
}
longueur = strlen(a.prenom)+1;
prenom = new char[longueur];
for(i=0;i<longueur;i++)
{
prenom=a.prenom;
}
longueur = strlen(a.adresse)+1;
adresse = new char[longueur];
for(i=0;i<longueur;i++)
{
adresse=a.adresse;
}
age= a.age;
for(i=0;i<3;i++)
{
emprunt = a.emprunt;
}
}
....
adherent::~adherent()
{
int i;
//delete [] nom;
delete [] prenom;
delete [] adresse;
for(i=0;i<3;i++)
{
delete [] emprunt;
}
delete [] emprunt;
}[/cpp]
[cpp]int main()
{
cout<<"toto";
adherent oliv("toto","olivier","5 rue de la marée",26);
adherent vincent("lulu","vincent","5 rue de la poutre",28);
return 0;
}[/cpp]
J'ai un problème avec la ligne :
//delete [] nom;
dans adherent.cpp
Mon programme retourne un code d'erreur à la fin de l'éxécution (-17.... ) :
- Si je la décommente et que je laisse le programme tel quel,
Par contre, si je commente la ligne : adherent vincent("lulu","vincent","5 rue de la poutre",28);
L'erreur n'apparait plus.
Donc, je ne peux faire qu'une instance si je veux pas crée d'erreur.
AZvez vous une petite idée?
Merci pour votre aide
Je fais des petits exos pour me remettre dans le bain du c++.
Et la, je sèche un peu.
J'ai un problème à la libération de la mémoire et je ne vois pas trop pourquoi.
[cpp]adherent.h
class adherent
{
char * nom;
char * prenom;
char * adresse;
int age;
//static int iden;
exemplaire * emprunt[3];
public:
adherent(char *,char *, char *, int);
adherent(const adherent &);
~adherent();
int emprunter(exemplaire &);
int restituer(exemplaire &);
};[/cpp]
[cpp]adherent.cpp
adherent::adherent(char * name, char * prename, char * adr, int old)
{
//id = 0;
int longueur,i;
longueur = strlen(name)+1;
nom = new char(longueur);
strcpy(nom,name);
longueur = strlen(prename)+1;
prenom = new char(longueur);
strcpy(prenom,prename);
longueur = strlen(adr)+1;
adresse = new char(longueur);
strcpy(adresse,adr);
age=old;
for(i=0;i<3;i++)
{
emprunt = 0;
}
//iden++;
}
// constructeur par recopie
adherent::adherent(const adherent & a)
{
int i,longueur;
longueur = strlen(a.nom)+1;
nom = new char[longueur];
for(i=0;i<longueur;i++)
{
nom=a.nom;
}
longueur = strlen(a.prenom)+1;
prenom = new char[longueur];
for(i=0;i<longueur;i++)
{
prenom=a.prenom;
}
longueur = strlen(a.adresse)+1;
adresse = new char[longueur];
for(i=0;i<longueur;i++)
{
adresse=a.adresse;
}
age= a.age;
for(i=0;i<3;i++)
{
emprunt = a.emprunt;
}
}
....
adherent::~adherent()
{
int i;
//delete [] nom;
delete [] prenom;
delete [] adresse;
for(i=0;i<3;i++)
{
delete [] emprunt;
}
delete [] emprunt;
}[/cpp]
[cpp]int main()
{
cout<<"toto";
adherent oliv("toto","olivier","5 rue de la marée",26);
adherent vincent("lulu","vincent","5 rue de la poutre",28);
return 0;
}[/cpp]
J'ai un problème avec la ligne :
//delete [] nom;
dans adherent.cpp
Mon programme retourne un code d'erreur à la fin de l'éxécution (-17.... ) :
- Si je la décommente et que je laisse le programme tel quel,
Par contre, si je commente la ligne : adherent vincent("lulu","vincent","5 rue de la poutre",28);
L'erreur n'apparait plus.
Donc, je ne peux faire qu'une instance si je veux pas crée d'erreur.
AZvez vous une petite idée?
Merci pour votre aide