FAQ PascalConsultez toutes les FAQ
Nombre d'auteurs : 10, nombre de questions : 402, dernière mise à jour : 7 janvier 2018 Ajouter une question
Bienvenue dans la F.A.Q. Pascal !
Celle-ci rassemble les réponses aux questions les plus fréquemment posées sur le langage Pascal et tous ses outils de programmation. Si elle n'a pas pour vocation de répondre à toutes les interrogations possibles, elle reste une bonne base de connaissances sur le Pascal, et ne demande qu'à être enrichie par vos expériences personnelles.
Nous vous invitons à proposer vos propres questions/réponses directement dans la FAQ ou, si vous souhaitez apporter une modification à une question/réponse existante, à la poster dans le fil de discussion renseigné ci-dessous.
Nous vous souhaitons une bonne lecture !
L'équipe Pascal.
Le tas est la zone de mémoire dynamique : il permet de créer des variables en cours d'exécution. Pour ce faire, il faut utiliser des pointeurs et les allouer à l'aide de New ou GetMem, puis les supprimer respectivement avec Dispose ou FreeMem.
Lorsqu'il n'y a plus assez de mémoire disponible dans le tas, les procédures d'allocation New et GetMem produisent par défaut une erreur d'exécution fatale qui met fin au programme.
Pour éviter ce comportement « pas très pro », il est possible de faire en sorte que ces procédures renvoient la valeur Nil, pour pouvoir ensuite réagir de manière appropriée.
Pour ce faire, il faut créer une fonction FAR qui va se substituer au code par défaut :
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 | {$F+} (* Fonction FAR ! *) Function Erreur_Allocation (Taille : Word) : Integer; (* Force les procédures d'allocation de mémoire dynamique à renvoyer Nil si erreur *) Begin Erreur_Allocation := 1; { -1 pour Turbo Pascal } End; {$F-} |
Code delphi : | Sélectionner tout |
1 2 | HeapError := @Erreur_Allocation; |
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 | New(Variable_Dynamique); if Variable_Dynamique <> Nil then { Traitement } else WriteLn('Mémoire insuffisante !'); |
Un pointeur est une variable qui renferme une adresse en mémoire. Attention, il convient de ne pas confondre le pointeur et ce vers quoi il pointe : modifier un pointeur ne modifie pas ce vers quoi il pointe ! De même, copier un pointeur ne copie pas ce vers quoi il pointe. Pour ce faire, il faut copier une zone mémoire, et non un pointeur :
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 | Type tTab = Array [1..2] of LongInt; pTab = ^tTab; Var Tab1, Tab2 : pTab; Begin ... Tab1^ := Tab2^; { Copie effective du tableau 2 vers le tableau 1 } Tab1 := Tab2; { Copie de l'adresse du tableau 2, pas du tableau lui-même } ... End; |
Les pointeurs servent donc de lien avec la mémoire, et notamment avec la mémoire dynamique (le tas).
La pile est une zone mémoire où sont stockées toutes les données temporaires d'un programme. Comme son nom l'indique, elle fonctionne comme une pile d'assiettes. Néanmoins, vous ne pouvez pas bouger les « assiettes » comme vous le souhaitez : toute assiette posée doit être retirée pour pouvoir retirer celle qui se situe en dessous (c'est une pile LIFO, Last In First Out : dernier rentré, premier sorti). La pile se situe dans son propre segment (SS, stack segment) et est décrite à l'aide de deux pointeurs : le pointeur de la base de la pile (BP, base pointer), et le pointeur du haut de la pile (SP, stack pointer).
Chaque fois qu'une procédure ou une fonction est appelée, les divers paramètres qu'il faut lui transmettre sont placés sur la pile, et lorsque l'on sort de la procédure, la pile est « nettoyée », autrement dit tous les paramètres sont en quelque sorte effacés de la pile. Les variables locales à une procédure ou fonction sont également réservées dans la pile.
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.