C++ : delete d'un char * : quelle est la bonne solution ? - C++ - Programmation
Marsh Posté le 09-12-2002 à 09:54:16
Est-ce que la première solution détruit bien l'allocation de tout le tableau et pas juste son premier octet ?
Marsh Posté le 09-12-2002 à 10:05:31
La bonne solution est bien évidemment la deuxième (delete[] nom;). Par contre il est vrai que certains compilateurs (et notamment Visual) tolèrent les deux écritures et désallouent bien le tableau en entier (et pas juste le premier élément).
Marsh Posté le 09-12-2002 à 10:18:34
La syntaxe correcte est la deuxième.
La première ne serait valable que dans le cas de l'allocation suivante :
Code :
|
Mais si tu alloues un tableau, alors tu dois désallouer l'intégralité du tableau, ce que fait la seconde solution. Comme te le dit antp, la première solution ne te désallouera que le premier octet.
Marsh Posté le 09-12-2002 à 19:39:28
Citation : Comme te le dit antp, la première solution ne te désallouera que le premier octet. |
c'est faux.
Quand on a alloue un bloc on ne peut pas le desallouer octet par octet..
le delete sans [], desalloue bien la memoire mais par contre risque d'avoir des problemes sur des tableaux d'objets (le constructeur ne sera pas appele pour tous les objets du tableau).
de plus je rappelle qu'il est possible de modifier le comportement du new/delete et du new[]/delete[] et que ce simple fait, devrait vous empecher de melanger les versions avec [] et sans [].
LeGreg
Marsh Posté le 09-12-2002 à 23:31:58
legreg a écrit :
|
tu voulais sans doute dire destructeur. Sinon, .
Marsh Posté le 09-12-2002 à 23:49:21
shinji a écrit : Je vois partout deux solutions pour le delete, les 2 compiles et marchent a priori : |
Aucune n'est bonne, il ne faut pas utiliser les char * et il ne faut pas utiliser les array C-like en C++ si possible
Utilise vector et string et tu ne te poseras plus jamais ce genre de question au final peu constructive.
Marsh Posté le 09-12-2002 à 23:54:27
Bon comme la discution est terminée, j'en profite !
Bonjour shinji !
Qu'est-ce que tu deviens ?
Y'a un bail qu'on t'as pas vu
Marsh Posté le 10-12-2002 à 02:25:58
C'est comme ça:
Code :
|
Il faut impérativement les respecter, il n'y a pas de "oui mais chez moi ça marche si je mélange" qui vaille.
Marsh Posté le 09-12-2002 à 09:00:45
Je vois partout deux solutions pour le delete, les 2 compiles et marchent a priori :
char * nom = new char[255];
delete nom;
ou
delete [] nom;
Est-ce que les 2 sont bonnes et pourquoi ?
Thanks