FAQ PascalConsultez toutes les FAQ

Nombre d'auteurs : 10, nombre de questions : 400, dernière mise à jour : 12 septembre 2016  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.

Commentez


SommaireLes différents compilateursTurbo PascalErreurs d'exécutionErreurs fatales (17)
précédent sommaire suivant
 

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

Mis à jour le 6 mars 2004 Alcatîz Eric Sigoillot

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.

Mis à jour le 28 mai 2007 Alcatîz

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

Mis à jour le 6 mars 2004 Alcatîz Eric Sigoillot

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.

Mis à jour le 3 juin 2007 Alcatîz

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.

Mis à jour le 3 juin 2007 Alcatîz

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.

Mis à jour le 9 juin 2007 Alcatîz

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.

Mis à jour le 9 juin 2007 Alcatîz

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.

Mis à jour le 6 mars 2004 Alcatîz Eric Sigoillot

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.
Il est possible aussi qui vous essayiez d'initialiser un overlay depuis... un overlay. Les initialisations d'overlays ne peuvent se faire que dans le module principal.

Mis à jour le 9 juin 2007 Alcatîz

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

Mis à jour le 9 juin 2007 Alcatîz

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é).

Mis à jour le 10 juin 2007 Alcatîz

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.

Mis à jour le 10 juin 2007 Alcatîz

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.

Mis à jour le 10 juin 2007 Alcatîz

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

Mis à jour le 10 juin 2007 Alcatîz

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.

Mis à jour le 10 juin 2007 Alcatîz

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.

Mis à jour le 10 juin 2007 Alcatîz

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.

Mis à jour le 6 mars 2004 Alcatîz 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 © 2017 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.

 
Responsables bénévoles de la rubrique Pascal : Gilles Vasseur - Alcatîz -