Aller au contenu

Message d'erreur IBM i (AS/400)

MCH2802

Limitation de programme atteinte à l'instruction &1, code d'erreur &2.

Gravité 40 · Fin anormale du programme ou de la fonction

Cause

Etant donné les objets ou les instructions contenus dans le modèle du programme, le programme exécutable dépasse les limites définies dans les spécifications de la machine. Voici les codes d'erreur et leur signification : 0001-- Les données nécessaires à l'initialisation des zones statiques dépassent 65535 octets. 0002-- La logique nécessaire à l'initialisation des zones statiques dépasse 65535 octets. 0003-- Certaines constantes internes dépassent 4096 octets. 0004-- Aucun registre n'est disponible. 0005-- La zone constante de début dépasse 65024 octets. 0006-- L'espace de travail, nécessaire à la machine pour l'appel de ce programme, dépasse 65535 octets. Or, l'espace alloué à l'appel d'un programme, à l'exclusion de l'espace alloué à partir de l'espace de stockage automatique, est de 65200 octets. 0007-- Une instruction a nécessité plus de mémoire pour son exécution qu'il n'était prévu dans le programme encapsulé. 0008-- L'encapsulation de l'instruction MI provoque une demande de plus de 15789888 octets. 0009-- Le nombre d'éléments, devant être adressés par la machine, dépasse 4040. 000A - Le programme demande plus de 16776960 octets de mémoire, soit pour l'ASF (automatic storage frame) soit pour la SSF (static storage frame). 000B-- Le programme demande plus de 16777216 octets pour toutes les données et instructions.

Que faire

Effectuez l'une des opérations suivantes : - Réécrivez le programme pour qu'il crée moins d'objets et utilise moins d'instructions. - Divisez le programme en plusieurs programmes plus petits. - Si le code d'erreur est 0004, signalez l'incident (commande ANZPRB).

Variables du message

Quand le système envoie le message, chaque variable est remplacée par une valeur réelle : un nom d'objet, de bibliothèque, un code...

VariableTypeLongueur
&1 *HEX 2
&2 *HEX 2

Sur votre IBM i

Afficher la description complète du message :

DSPMSGD RANGE(MCH2802) MSGF(QSYS/QCPFMSG)

L'intercepter dans un programme CL, quand il est envoyé comme message d'échappement :

MONMSG MSGID(MCH2802) EXEC(DO)
  /* traitement de l'erreur */
ENDDO