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.
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 &);
};
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[i] = 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[i]=a.nom[i];
}
longueur = strlen(a.prenom)+1;
prenom = new char[longueur];
for(i=0;i<longueur;i++)
{
prenom[i]=a.prenom[i];
}
longueur = strlen(a.adresse)+1;
adresse = new char[longueur];
for(i=0;i<longueur;i++)
{
adresse[i]=a.adresse[i];
}
age= a.age;
for(i=0;i<3;i++)
{
emprunt[i] = a.emprunt[i];
}
}
....
adherent::~adherent()
{
int i;
//delete [] nom;
delete [] prenom;
delete [] adresse;
for(i=0;i<3;i++)
{
delete [] emprunt[i];
}
delete [] emprunt;
}
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;
}
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