delete ou delete[] ? - C++ - Programmation
Marsh Posté le 06-05-2003 à 14:23:24
un vecteur ?!? je ne sais pas ce que c'est ...
Marsh Posté le 06-05-2003 à 15:19:45
et la dans le cas exposé si dessus, MyChar est un pointeur ou un tableau ?
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...
[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.
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 :
|
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
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...
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 ? |
Marsh Posté le 06-05-2003 à 15:57:14
++Taz a écrit :
|
l'edit est pas là pour faire joli...
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...).
Marsh Posté le 06-05-2003 à 16:32:31
ça se saurait si la sémantique et la synthaxe étaient le meme chose...
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] ?
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.
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 )
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
Marsh Posté le 06-05-2003 à 17:40:22
merci bcp pour ces explications en tout cas
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 )-