Foo * set = new Foo [100]; // ... delete [] set;Vous ne passez pas les limites du tableau à supprimer []. Mais où sont stockées ces informations? Est-ce standardisé?
Réponses
Trop de publicités?Lorsque vous allouez de la mémoire sur le tas, votre allocateur gardera une trace de la quantité de mémoire allouée. Ceci est généralement stocké dans un segment "head" juste avant la mémoire qui vous est allouée. De cette manière, lorsqu'il est temps de libérer de la mémoire, le désallocateur sait exactement combien de mémoire doit être libérée.
Cela dépend de l'implémentation de votre compilateur.
La FAQ C ++ Lite contient quelques informations supplémentaires sur le sujet.
L'information n'est pas standardisée. Toutefois, dans les plates-formes que j'ai travaillé sur cette information est stockée dans la mémoire juste avant le premier élément. Par conséquent, vous pourriez théoriquement l'accès et l'inspecter, cependant c'est pas la peine.
Aussi c'est pourquoi vous devez utiliser delete [] lorsque vous la mémoire allouée avec new [], comme le tableau de la version de supprimer sait (et où) elle doit regarder gratuit la quantité de mémoire - et d'appeler le numéro de destructeurs des objets.
Une belle description de comment cela pourrait fonctionner dans la pratique est donnée par Raymond Chen :
http://blogs.msdn.com/oldnewthing/archive/2004/02/03/66660.aspx