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.
- Runtime error 200 - Division by zero
- Runtime error 201 - Range check error
- Runtime error 202 - Stack overflow error
- Runtime error 203 - Heap overflow error
- Runtime error 204 - Invalid pointer operation
- Runtime error 205 - Floating point overflow
- Runtime error 206 - Floating point underflow
- Runtime error 207 - Invalid floating point operation
- Runtime error 208 - Overlay manager not installed
- Runtime error 209 - Overlay file read error
- Runtime error 210 - Object not initialized
- Runtime error 211 - Call to abstract method
- Runtime error 212 - Stream registration error
- Runtime error 213 - Collection index out of range
- Runtime error 214 - Collection overflow error
- Runtime error 215 - Arithmetic overflow error
- Runtime error 216 - General protection fault
Deux causes peuvent être à l'origine de ce problème :
- soit votre programme effectue réellement une division par zéro, auquel cas vous devez vérifier vos calculs ;
- soit cette erreur se produit au démarrage de votre programme : il s'agit d'un bogue connu de l'unité CRT (voir ci-dessous).
L'erreur 200 est repérée depuis longtemps comme un bogue de Turbo Pascal 7 causé par l'unité Crt, dû à la fréquence élevée des processeurs actuels qui n'était pas prévue par Borland dans les années 80. Si Borland ne propose aucun correctif officiel, il existe plusieurs patches officieux disponibles sur Internet.
Il est à noter que le Turbo Pascal téléchargeable ci-dessous est déjà patché.
Lorsque vous spécifiez la directive de compilation {$R+}, le compilateur ajoute au code des instructions de contrôle de validité de domaine :
- sur les indices de tableaux ;
- lors des affectations de valeurs à des variables ;
- lors de la transmission de paramètres aux procédures et fonctions.
Une erreur d'exécution est déclenchée en cas de contrôle négatif par ce code additionnel.
Vous venez de faire sauter la pile ! Généralement, c'est ce qui arrive lorsque l'on utilise une (des) procédure(s) récursive(s), qui s'appelle(nt) elle(s)-même(s). Il faut savoir que chaque fois qu'une procédure est appelée, les paramètres sont placés sur la pile, et retirés quand on quitte la procédure. Or, avec un appel récursif, on ne quitte les procédures qu'une fois que le processus récursif entier est terminé. Donc, si le nombre d'itérations est trop important, voire indéterminé (boucle infinie), la pile devient surchargée, et une erreur se déclenche 202.
Une solution au problème peut être d'augmenter la taille de la pile au moyen de la directive de compilation {$M ... }.
Cette erreur est renvoyée par New ou GetMem lorsque la place disponible dans le tas est insuffisante pour allouer le bloc demandé. Il se peut qu'il y ait au total suffisamment de mémoire disponible dans le tas, mais qu'à cause de la fragmentation de ce dernier, il n'y ait pas de bloc contigu suffisamment grand pour répondre à la demande d'allocation.
Il est possible d'éviter que se produise cette erreur d'exécution : voir le lien ci-dessous.
Cette erreur est déclenchée par Dispose et FreeMem lorsqu'il leur est demandé de désallouer une variable dynamique déjà désallouée (l'erreur la plus fréquente) ou dont l'adresse pointe en dehors du tas.
Il est également possible que le pointeur passé à Dispose ou FreeMem soit valide, mais que la table des fragments ait atteint sa taille maximale.
Une erreur de débordement est survenue lors d'une opération en virgule flottante (au niveau du coprocesseur lui-même ou des routines d'émulation du coprocesseur).
Le résultat de l'opération est trop grand pour le format de réel choisi.
Une erreur de débordement inverse est survenue au niveau du coprocesseur, lors d'une opération en virgule flottante.
Le débordement inverse signifie que le résultat d'une opération est plus petit que la plus petite valeur représentable dans le format de réel choisi.
Une opération sur des réels a échoué. Les causes de cette erreur sont les suivantes :
- Trunc ou Round renvoient une valeur entière qui ne peut tenir dans un entier long (32 bits) ;
- vous passez un paramètre négatif à la fonction Sqrt (racine carrée) ;
- vous passez un paramètre négatif ou nul à la fonction Ln (logarithme népérien) ;
- un débordement de pile du coprocesseur s'est produit.
Vous appelez une routine qui se trouve dans un overlay qui n'a pas été chargé. Pour activer le gestionnaire d'overlays et charger un overlay, il faut appeler la procédure OvrInit. Le résultat de l'initialisation peut être récupéré par la fonction OvrResult :
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 | Program OvrTest; Uses Overlay; Begin OvrInit('Partiel.ovr'); if OvrResult = ovrOk then { OK } else { Erreur } End. |
Le gestionnaire d'overlay n'a pu lire le fichier .OVR contenant l'overlay à charger.
Pour éviter cette erreur d'exécution, testez le résultat de la procédure OvrInit (exemple : voir lien vers l'erreur 208 ci-dessous).
Vous essayez d'appeler une méthode virtuelle d'un objet dont l'instance n'a pas été initialisée (son constructeur n'a pas été appelé).
Il est possible de déclarer des types objets ou classes contenant des méthodes virtuelles abstraites (avec la directive abstract;). Les méthodes abstraites ont la particularité d'exister uniquement dans la déclaration du type, mais pas dans son implémentation. Elles doivent être implémentées dans des objets ou classes descendants.
Si vous déclarez une instance d'objet ou de classe contenant une ou plusieurs méthodes abstraites et si vous appelez ces dernières, l'erreur 211 se déclenchera puisqu'il n'y a aucun code associé à ces méthodes.
Un type d'objet TurboVision qui doit être utilisé dans des opérations de flux (stream) doit toujours être enregistré au moyen de la procédure RegisterType. Si cette procédure rencontre une erreur, elle déclenche l'erreur d'exécution 212.
Cette erreur est déclenchée si vous transmettez un index hors limite à une des méthodes de l'objet tCollection suivantes :
- At (retourne l'adresse d'un item) ;
- AtDelete (supprime un item) ;
- AtFree (désalloue un item) ;
- AtInsert (insère un item) ;
- AtPut (remplace un item par un autre).
Cette erreur est déclenchée si vous tentez d'ajouter un nouvel item à une collection (tCollection ou objet descendant) qui ne peut plus être étendue.
Cette erreur signifie qu'un débordement (overflow) s'est produit dans une opération arithmétique sur des entiers.
Elle ne peut se déclencher que si la directive de compilation {$Q+} a été spécifiée.
Sur un système tournant en mode protégé, vous tentez probablement d'accéder à une adresse mémoire située en dehors de l'espace alloué par le système à votre programme. Vous faites vraisemblablement alors référence à un pointeur dont la valeur est indéfinie (ou Nil).
Une autre cause peut être que vous essayez d'écrire dans un segment de code.
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.