View previous topic :: View next topic |
Author |
Message |
loopx Advocate
Joined: 01 Apr 2005 Posts: 2787 Location: Belgium / Liège
|
Posted: Thu Nov 10, 2005 5:53 pm Post subject: [g++] impossible de faire un delete ??? (résolu) |
|
|
Je fais un dossier de c++ pour l'école. J'ai pas encore fais de destructeur, alors je m'y met. Mais, apparement, le "delete" ne fonctionne pas!!!
Message d'erreur:
Code: |
Fin de INPRES-LOCAL-MAIL...
*** glibc detected *** free(): invalid pointer: 0x0805149c ***
Aborted
|
Et le code qui va avec:
Code: |
Message *m1=new Message();
...
cout << "Fin de INPRES-LOCAL-MAIL..." << endl;
delete m1;
|
Le destructeur (juste pour savoir si je me planterai pas dans mon code):
Code: |
les déclaration:
----------------
CorrespondantEMail* source;
CorrespondantEMail* destination[MAX_DESTINATION];
Message::~Message() {
delete source;
delete [] destination;
}
|
Je ne sais pas si la zone mémoire à été libérée...
J'ai une autre question: si on a une "string nom", il faut faire un delete aussi ou il y a un mécanisme d'automatisation?
Merci _________________ Mon MediaWiki perso : http://pix-mania.dyndns.org
Last edited by loopx on Thu Nov 10, 2005 9:09 pm; edited 1 time in total |
|
Back to top |
|
|
xaviermiller Bodhisattva
Joined: 23 Jul 2004 Posts: 8723 Location: ~Brussels - Belgique
|
Posted: Thu Nov 10, 2005 6:14 pm Post subject: |
|
|
Hmm, ne serait-ce pas plutôt
Code: | CorrespondantEMail* source;
CorrespondantEMail* destination[MAX_DESTINATION];
Message::~Message() {
delete source;
for (int i = 0 ; i < MAX_DESTINATION; i++)
delete destination[i];
} |
en fait est le pendant de , et ici tu as défini un array fixe de pointeurs. _________________ Kind regards,
Xavier Miller |
|
Back to top |
|
|
Leander256 l33t
Joined: 05 Jul 2003 Posts: 910 Location: Singapour
|
Posted: Thu Nov 10, 2005 7:55 pm Post subject: Re: [g++] impossible de faire un delete ??? |
|
|
loopx wrote: | Code: |
Fin de INPRES-LOCAL-MAIL...
*** glibc detected *** free(): invalid pointer: 0x0805149c ***
Aborted
|
Le destructeur (juste pour savoir si je me planterai pas dans mon code):
Code: |
les déclaration:
----------------
CorrespondantEMail* source;
CorrespondantEMail* destination[MAX_DESTINATION];
Message::~Message() {
delete source;
delete [] destination;
}
|
|
Je mettrais ma main à couper (c'est du conditionnel hein) que tu n'as pas initialisé les pointeurs lorsque tu appelles le destructeur. La solution contre ça, c'est d'initialiser à 0 tes pointeurs dans le constructeur :
Code: |
Message::Message() {
...
source = 0;
destination = 0;
...
}
|
Lorsque le programme fait un delete sur un pointeur nul, il ne se passe rien. D'autre part XavierMiller a bon concernant la suppression du tableau
loopx wrote: | J'ai une autre question: si on a une "string nom", il faut faire un delete aussi ou il y a un mécanisme d'automatisation? |
Non. Tu ne dois faire un delete que sur les pointeurs. Si tu ne fais pas un new, tu ne fais pas de delete.
Un conseil : si tu n'as jamais eu de cours de C++ et qu'on te faire un projet dans ce langage, essaye de trouver dans une bibliothèque un bouquin sur C++, sinon tu vas vraiment galérer. |
|
Back to top |
|
|
loopx Advocate
Joined: 01 Apr 2005 Posts: 2787 Location: Belgium / Liège
|
Posted: Thu Nov 10, 2005 9:08 pm Post subject: |
|
|
In fact...
J'avais quelque problème de logique . Ca fonctionne bien maintenant
Merci _________________ Mon MediaWiki perso : http://pix-mania.dyndns.org |
|
Back to top |
|
|
|