IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo

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.

SommaireLe fonctionnement du systèmeLe fonctionnement du système Généralités (4)
précédent sommaire suivant
 

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.

Mis à jour le 7 mars 2004 Eric Sigoillot

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-}
Au début du programme, il faut affecter l'adresse de cette fonction à la variable HeapError (déclarée dans l'unité System) :

Code delphi : Sélectionner tout
1
2
  
HeapError := @Erreur_Allocation;
Dans le programme, on peut alors tester si l'allocation de mémoire dynamique a réussi, comme dans cet exemple :

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 !');

Mis à jour le 3 juin 2007 Alcatîz

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;
Dans l'expression Tab2^, l'opérateur ^ signifie "variable dont l'adresse est contenue dans le pointeur Tab2".

Les pointeurs servent donc de lien avec la mémoire, et notamment avec la mémoire dynamique (le tas).

Mis à jour le 14 janvier 2007 Alcatîz Eric Sigoillot

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.

Mis à jour le 7 mars 2004 Eric Sigoillot

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 ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les 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.