Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1589 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  C++ : delete d'un char * : quelle est la bonne solution ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

C++ : delete d'un char * : quelle est la bonne solution ?

n°265070
shinji
Posté le 09-12-2002 à 09:00:45  profilanswer
 

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

mood
Publicité
Posté le 09-12-2002 à 09:00:45  profilanswer
 

n°265084
antp
Super Administrateur
Champion des excuses bidons
Posté le 09-12-2002 à 09:54:16  profilanswer
 

Est-ce que la première solution détruit bien l'allocation de tout le tableau et pas juste son premier octet ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°265087
gatorette
Posté le 09-12-2002 à 10:05:31  profilanswer
 

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).


---------------
each day I don't die is cheating
n°265091
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 09-12-2002 à 10:18:34  profilanswer
 

La syntaxe correcte est la deuxième.
 
La première ne serait valable que dans le cas de l'allocation suivante :
 

Code :
  1. char *nom = new char;


 
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.


Message édité par Harkonnen le 09-12-2002 à 10:18:57

---------------
J'ai un string dans l'array (Paris Hilton)
n°265898
LeGreg
Posté le 09-12-2002 à 19:39:28  profilanswer
 

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


---------------
voxel terrain render engine | animation mentor
n°266133
wpk
Posté le 09-12-2002 à 23:31:58  profilanswer
 

legreg a écrit :

Citation :

Comme te le dit antp, la première solution ne te désallouera que le premier 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).
...
LeGreg

 
 
tu voulais sans doute dire destructeur. Sinon,  :jap:.

n°266144
Kristoph
Posté le 09-12-2002 à 23:49:21  profilanswer
 

shinji a écrit :

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


 
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 :D
 
Utilise vector et string et tu ne te poseras plus jamais ce genre de question au final peu constructive.

n°266149
Mara's dad
Yes I can !
Posté le 09-12-2002 à 23:54:27  profilanswer
 

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  :)


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°266182
Musaran
Cerveaulté
Posté le 10-12-2002 à 02:25:58  profilanswer
 

C'est comme ça:

Code :
  1. p= malloc(n)   ; free(p)    ;//ou calloc, realloc
  2. p= new type    ; delete p   ;
  3. p= new type[n] ; delete[] p ;


Il faut impérativement les respecter, il n'y a pas de "oui mais chez moi ça marche si je mélange" qui vaille.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  C++ : delete d'un char * : quelle est la bonne solution ?

 

Sujets relatifs
[mysql] ma requete est elle bonne?pb avec la fonction DELETE ds une BdD
pb mysql / PHP avec la fonction DELETEFormatage date sous ORACLE et PHP [Resolu avec TO_CHAR]
Meilleure solution pour garder la configuration d'1 page ?String To Char Help
[c] ya un truc que je capte po avec scanf et les charPour aligner 4 images je choisis quelle solution ?
[C] est-ce que cette déclaration est bonne ?Meilleure solution pour récupérer des infos chez un hébergeur de site
Plus de sujets relatifs à : C++ : delete d'un char * : quelle est la bonne solution ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR