2017-08-14 7 views
0

I alloués dynamiquement un tableau (unsigned int n aurait été passé en paramètre dans une fonction):`supprimer []` `quand de nouveaux [0]`

int * ar = new int [n]; 

Quand je suis fait à l'utiliser:

delete [] ar; 

Mais, que se passe-t-il lorsque n = 0? Alloue 0int s est-il identique à ne pas allouer du tout? Dans quel cas, mauvaises choses se produisent quand j'appelle delete?

+2

https://stackoverflow.com/questions/1087042/c-new-int0-will-it-allocate-memory Et vous allouez quelque chose (des données pour gérer au moins votre allocation) - ce n'est pas la même chose que de ne rien faire . – deviantfan

+0

@deviantfan - Mon mauvais! Je n'ai trouvé aucun doublon parce que je formulais comme "pouvez-vous' supprimer "0'", alors que votre lien l'a exprimé comme "pouvez-vous' new' '0'" (à la fin, c'est un peu la même chose) . Devrais-je supprimer ce Q? –

+0

Utilisez std :: vector! –

Répondre

3

Il est bon pour new un tableau de taille nulle, et à delete il. C'est plus pratique que tout, car cela signifie que vous n'avez pas besoin d'écrire des conditions distinctes pour le cas 0.

+0

Tant que vous n'essayez pas réellement * l'utiliser * pour n'importe quoi ;-) –

+0

_Phew! _ Comme je suis très paresseux, je suis allé tout le chemin à demander un Q sur SO pour s'assurer que je n'ont pas besoin d'écrire des conditions séparées pour '0'. ': D –