DISPOSE |
Disposer |
|---|---|
| Pascal | |
Syntaxe
| Procedure Dispose(Var p:pointer-type); |
Paramètres
| Nom | Description |
|---|---|
| p | Ce paramètre permet d'indiquer le pointeur de l'emplacement mémoire à libérer. |
Description
Cette procédure permet de libérer une partie de la mémoire préalablement alloué par la procédure New.
Algorithme
|
MODULE DISPOSE(Ref Pointeur) SI Pointeur n'est pas NIL ALORS Libérer la mémoire pointée par Pointeur * Définir Pointeur à NIL pour éviter l'utilisation de mémoire libérée Pointeur ← NIL FIN SI |
Remarques
- Cette procédure n'a pas été défini dans le Pascal d'origine et la convention d'appel de cette procédure dépend donc essentiellement des marques de Pascal que vous utilisez.
- DISPOSE est utilisée pour libérer dynamiquement la mémoire allouée avec NEW. Elle permet d'éviter les fuites mémoire dans les programmes utilisant des pointeurs. Elle s'applique uniquement aux variables allouées dynamiquement.
- Le paramètre de DISPOSE doit être une variable de type pointeur. Si le pointeur ne référence pas une zone valide, le comportement est indéfini. Il est donc essentiel de s'assurer que le pointeur n'est ni nul ni invalide avant l'appel.
- Après l'appel de DISPOSE, le pointeur utilisé conserve son ancienne valeur. Cependant, il ne pointe plus vers une mémoire valide. Il est recommandé d'assigner NIL au pointeur après la libération.
- DISPOSE ne remet pas automatiquement les champs d'un enregistrement à zéro. Elle libère uniquement la mémoire, sans nettoyer son contenu. C'est au programmeur de s'assurer qu'aucune donnée sensible ne reste accessible.
- Si la mémoire a été allouée à l'aide de NEW(p, t) pour des types variantés, on peut également utiliser DISPOSE(p, t) pour libérer correctement la structure. Cela garantit que la mémoire correspondante à la variante est bien désallouée.
- L'usage de DISPOSE est crucial dans les applications longues ou à forte consommation mémoire. Oublier d'appeler DISPOSE sur des pointeurs alloués mène à des fuites mémoire cumulatives. Un bon suivi des allocations et libérations est donc indispensable.
- Certaines implémentations de Pascal gèrent automatiquement la mémoire avec des mécanismes modernes. Mais dans le Pascal standard, DISPOSE reste nécessaire pour toute gestion manuelle. Cela reflète la responsabilité explicite du programmeur dans la gestion des ressources.
- DISPOSE ne provoque aucune erreur en cas de double libération, mais le comportement est imprévisible. Cela peut corrompre la mémoire du programme et entraîner des erreurs difficiles à détecter. Il faut toujours suivre un protocole clair pour éviter les utilisations erronées de pointeurs libérés.
Dernière mise à jour : Mercredi, le 10 avril 2019