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

  FORUM HardWare.fr
  Programmation
  C++

  delete ou delete[] ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

delete ou delete[] ?

n°384309
blackgodde​ss
vive le troll !
Posté le 06-05-2003 à 13:57:22  profilanswer
 

char* MyChar = new char[15];  
 
on doit le désallouer ac delete ou ac delete[] ?
 
si c'est avec delete[], que se passe-t-il si on a fait delete (sous vc++7) ?


---------------
-( BlackGoddess )-
mood
Publicité
Posté le 06-05-2003 à 13:57:22  profilanswer
 

n°384317
jagstang
Pa Capona ಠ_ಠ
Posté le 06-05-2003 à 14:04:03  profilanswer
 

delete [] si c'est un vecteur

n°384374
blackgodde​ss
vive le troll !
Posté le 06-05-2003 à 14:23:24  profilanswer
 

un vecteur ?!? je ne sais pas ce que c'est ...


---------------
-( BlackGoddess )-
n°384378
chrisbk
-
Posté le 06-05-2003 à 14:24:26  profilanswer
 

un tableau

n°384507
blackgodde​ss
vive le troll !
Posté le 06-05-2003 à 15:19:45  profilanswer
 

et la dans le cas exposé si dessus, MyChar est un pointeur ou un tableau ?


---------------
-( BlackGoddess )-
n°384513
skeye
Posté le 06-05-2003 à 15:23:26  profilanswer
 

BlackGoddess a écrit :

et la dans le cas exposé si dessus, MyChar est un pointeur ou un tableau ?


les 2... [:timour]
 
[edit]
C'était un peu léger comme explication...
En fait MyChar est ici un pointeur vers un caractère (comme déclaré par le char *).
Mais tu lui alloues une taille mémoire permettant de stocker 15 caractères, ce qui te permet de le manipuler comme un tableau.
Pour pouvoir désallouer cette mémoire il te faut donc utiliser delete[], sous peine de ne pas libérer toute la mémoire associée.


Message édité par skeye le 06-05-2003 à 15:28:25
n°384523
jagstang
Pa Capona ಠ_ಠ
Posté le 06-05-2003 à 15:28:07  profilanswer
 

dans le cas présent, tu déclare un pointeur sur un char (une chaine de caractère donc)
 
Si tu veux désallouer les 15 char, tu dois faire un  
 

Code :
  1. delete [] MyChar ;


Message édité par jagstang le 06-05-2003 à 15:28:27
n°384560
Taz
bisounours-codeur
Posté le 06-05-2003 à 15:43:59  profilanswer
 

un tableau n'est pas un pointeur
 
un tableau n'est pas une l-value
sizeof tableau = n * sizeof tableau[0]
 
la synthaxe est la meme, mais ce n'est pas absolument pas la meme chose

n°384588
skeye
Posté le 06-05-2003 à 15:52:49  profilanswer
 

++Taz a écrit :

un tableau n'est pas un pointeur


Personne n'a dit ça! Enfin si, moi, mais j'ai expliqué dans l'edit pourquoi dans ce cas précis je me permettais de faire le rapprochement...

n°384606
Taz
bisounours-codeur
Posté le 06-05-2003 à 15:55:33  profilanswer
 

Citation :

et la dans le cas exposé si dessus, MyChar est un pointeur ou un tableau ?
 
les 2..

mood
Publicité
Posté le 06-05-2003 à 15:55:33  profilanswer
 

n°384610
skeye
Posté le 06-05-2003 à 15:57:14  profilanswer
 

++Taz a écrit :

Citation :

et la dans le cas exposé si dessus, MyChar est un pointeur ou un tableau ?
 
les 2..

 


l'edit est pas là pour faire joli... :sarcastic:

n°384638
Taz
bisounours-codeur
Posté le 06-05-2003 à 16:05:12  profilanswer
 

t'aurais du supprimer

n°384662
skeye
Posté le 06-05-2003 à 16:14:33  profilanswer
 

++Taz a écrit :

t'aurais du supprimer


Bouef...note que c'est pas si incorrect que ça après tout.
Au niveau syntaxique, sa variable est un pointeur et uniquement un pointeur, mais au niveau sémantique c'est un tableau!
Il ne cherche pas ici à avoir une référence vers un char...il veut juste pouvoir en stocker plusieurs en y accédant par une seule variable (principe du tableau...).

n°384702
Taz
bisounours-codeur
Posté le 06-05-2003 à 16:32:31  profilanswer
 

ça se saurait si la sémantique et la synthaxe étaient le meme chose...

n°384813
blackgodde​ss
vive le troll !
Posté le 06-05-2003 à 17:10:16  profilanswer
 

et donc si je fais  
char* MyChar = new char[15]; delete MyChar;
ca ne désallouera que MyChar[0] ?


---------------
-( BlackGoddess )-
n°384815
Taz
bisounours-codeur
Posté le 06-05-2003 à 17:11:13  profilanswer
 

non, comportement indéfini. vraisemblablement un plantage ou une corruption du tas qui entrainera un plantage plus tard.

n°384840
blackgodde​ss
vive le troll !
Posté le 06-05-2003 à 17:21:00  profilanswer
 

aaahhhh voila pk g un prog qui se plante au bout d'une utilisation prolongée, et qui sortait une pelleté d'assert sur les fonctions internes de new et delete au debug :)
 
(si je posais cette question c'est que tout d'un coup j'ai eu le pressentiment que c'etait delete[] qu'il fallait utiliser, mais que tous mes codes précédents je les ai fait avec delete :( )


---------------
-( BlackGoddess )-
n°384843
blackgodde​ss
vive le troll !
Posté le 06-05-2003 à 17:22:00  profilanswer
 

Ne perdez pas de vue qu'un programme qui plante est d'une utilité quasi nulle, ce qui est loin d'être incompatible avec la notion d'Art. -> MDR :lol:


---------------
-( BlackGoddess )-
n°384905
blackgodde​ss
vive le troll !
Posté le 06-05-2003 à 17:40:22  profilanswer
 

merci bcp pour ces explications en tout cas :)


---------------
-( BlackGoddess )-

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

  delete ou delete[] ?

 

Sujets relatifs
DELETE de plusieurs lignes et de plusieurs tables?[C++] Faire des delete correct après des new !
tit pb de désallocation avec delete[Mysql] pb DELETE
"DELETE FROM `guest` WHERE `id` ='$id' LIMIT 1"; ca ne marche pa :cry:MySQL + REQUETE DELETE AVEC IMBRICATION !!!! HELP !!!!!!!
C++ : delete d'un char * : quelle est la bonne solution ?pb avec la fonction DELETE ds une BdD
pb mysql / PHP avec la fonction DELETEDelete et tableau de pointeurs
Plus de sujets relatifs à : delete ou delete[] ?


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