delete ou delete[] ?

delete ou delete[] ? - C++ - Programmation

Marsh Posté le 06-05-2003 à 13:57:22    

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

Marsh Posté le 06-05-2003 à 13:57:22   

Reply

Marsh Posté le 06-05-2003 à 14:04:03    

delete [] si c'est un vecteur

Reply

Marsh Posté le 06-05-2003 à 14:23:24    

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


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

Marsh Posté le 06-05-2003 à 14:24:26    

un tableau

Reply

Marsh Posté le 06-05-2003 à 15:19:45    

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


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

Marsh Posté le 06-05-2003 à 15:23:26    

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
Reply

Marsh Posté le 06-05-2003 à 15:28:07    

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
Reply

Marsh Posté le 06-05-2003 à 15:43:59    

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

Reply

Marsh Posté le 06-05-2003 à 15:52:49    

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

Reply

Marsh Posté le 06-05-2003 à 15:55:33    

Citation :

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

Reply

Marsh Posté le 06-05-2003 à 15:55:33   

Reply

Marsh Posté le 06-05-2003 à 15:57:14    

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

Reply

Marsh Posté le 06-05-2003 à 16:05:12    

t'aurais du supprimer

Reply

Marsh Posté le 06-05-2003 à 16:14:33    

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

Reply

Marsh Posté le 06-05-2003 à 16:32:31    

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

Reply

Marsh Posté le 06-05-2003 à 17:10:16    

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


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

Marsh Posté le 06-05-2003 à 17:11:13    

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

Reply

Marsh Posté le 06-05-2003 à 17:21:00    

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

Marsh Posté le 06-05-2003 à 17:22:00    

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

Marsh Posté le 06-05-2003 à 17:40:22    

merci bcp pour ces explications en tout cas :)


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

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed