Problème d'allocation mémoire dans ma classe

Bub325 Messages postés 41 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 28 avril 2010 - 25 mai 2003 à 15:46
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 - 26 mai 2003 à 01:39
Salut, j'ai un problème dans le code suivant au niveau de l'allocation mémoire de tmp.a = new char... dans operator+, et je ne sait pas du tout pourquoi donc si qqn peut m'aider ce serais un grand plaisir (je me lance en c++ et je fait ça pour aprendre).

#include <stdiostr.h>
#include <string.h>

class string
{
char* a;

public:
string(char* chaine = NULL)
{
if (chaine)
{
a = new char [strlen(chaine)+1];
strcpy(a,chaine);
}
else a = NULL;
}
~string()
{
delete [] a;
}
char* operator() ()
{
return a;
}
string &operator= (const string &p)
{
delete [] a;
if (p.a != NULL)
{
a = new char [strlen(p.a)+1];
strcpy(a,p.a);
}
else a = p.a;

return (*this);
}
string operator+ (const string &p)
{
string tmp;
int size = strlen(a) + strlen(p.a) + 1;
tmp.a = new char [size];
sprintf(tmp.a,"%s%s",a,p.a);
return tmp;
}
};

int main()
{
string a("kikoo"),b,c("bubu");
b = a + c;
cout << b() << '\n';
return 0;
}

Bub325
Le codeur pas comme tout le monde
8-)

1 réponse

cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
26 mai 2003 à 01:39
- Pour l'opérateur +, c'est l'objet courant qui doit être modifié, tu ne dois pas retourner un nouvel objet comme tu le fais.

- Toujours dans cette méthode, tu retournes un objet 'string' alors que tu n'as pas de constructeur de copie.

- Dans ton destructeur tu ne testes pas si le pointeur 'a' pointe sur une chaine ou sur NULL.

- Idem dans l'opérateur d'affectation: tu détruis 'a' alors qu'il pointe peut-être sur NULL.

Kaid - kaid.fr.st
0
Rejoignez-nous