Étape 5: Ne sais pas quelle taille tu es ?
TAS DE MÉMOIREAinsi que de la pile, C++ crée une autre grande piscine de mémoire appelée le tas. Le tas peut servir par le programmeur pour libérer, ou allouer, la mémoire à utiliser pour le programme. Un programmeur peut allouer une quantité de mémoire sur le tas à l’aide du mot clé « new » comme dans l’exemple suivant :
char * rockia = new char [256] ;
Vous pouvez utiliser le mot clé new lorsque vous ne savez pas combien votre programme utilise de la mémoire.
Un problème commun que beaucoup de programmeurs rencontré lors de l’allocation de mémoire est quelque chose appelé un « buffer overflow ». Un débordement de tampon se produit lorsqu’une expression ou une fonction remplace la mémoire dans l’emplacement mémoire adjacentes. Cela peut arriver à cause des tableaux de longueur fixe. Une utilisation courante de tableaux est de tenir les cordes. Vous pouvez virer deux cordes ensemble pour créer une chaîne concaténée. Si la quantité de caractères de la chaîne est plus grande que la taille du tableau, que vous juste due à un débordement de tampon.
(AVERTISSEMENT : BUFFER OVERFLOWS SONT UN EXPLOIT COMMUN UTILISÉ PAR LES PIRATES POUR EXÉCUTER DU CODE ARBITRAIRE SUR UN SYSTÈME DISTANT.)
N’OUBLIEZ PAS DE NETTOYER APRÈS VOUS-MÊME
Allocation de mémoire sur le tas est une possibilité intéressante, mais il a un très grand danger en C++: Si vous allouez de la mémoire sur le tas, vous devez penser à le retourner.
Vous revenez mémoire sur le tas à l’aide du mot-clé « effacer » comme suit :
char * rockia = new char [256] ;
... utiliser toute la mémoire, vous voulez...
maintenant retourner le bloc de mémoire sur le tas
delete [] rockia ;
Rockia = NULL ;
(Remarque : suppression d’emploi pour retourner un non-tableau et delete [] pour un tableau.)
Si vous ne retournez pas mémoire de tas lorsque vous avez terminé, votre programme va lentement consommer de la mémoire et éventuellement ralentir davantage que le système d’exploitation tente de satisfaire sa gourmandise apparemment insatiable. Finalement, le programme va s’arrêter comme l’o/s peut satisfaire ne sont plus ses demandes de mémoire.
Retourner la même mémoire sur le tas n’est pas tout à fait aussi mauvais. Qui provoque votre programme crash presque immédiatement. Elle est considérée comme bonne pratique de programmation de mettre à zéro un pointeur une fois que vous avez supprimé le bloc de mémoire qu’il pointe vers pour deux très bonnes raisons :
●Deleting un pointeur qui contient la valeur NULL n’a aucun effet.
●NULL n’est jamais une adresse valide. Tente d’accéder à la mémoire à l’emplacement de NULL sera toujours causer votre programme planter immédiatement, qui basculera vous qu’il y a un problème et rendent beaucoup plus facile à trouver.
Vous ne devez supprimer un enregistrement si votre programme se terminera bientôt - toute la mémoire de tas est restaurée vers le système d’exploitation lorsqu’un programme se termine. Toutefois, le retour de mémoire que vous avez alloué sur le tas est une bonne habitude d’entrer dans.