taille des paramètres

RPG (3 et 4, free), CL, SQL, etc...
Répondre
OBR
Messages : 10
Enregistré le : mar. 29 avr. 2014, 15:05:25
Localisation : Pfastatt
Contact :

(sans texte)

Message par OBR »

Bonjour,

Dans nos chaines de programmes, nous faisons appel à un programme (C) dont la taille d'un des paramètres est à 9999.

Les programmes (A) appelant ce programme ont eux ce paramètre dans des tailles différentes et inférieures à 9999.

Dans certains cas, un message d'erreur MCH3601 apparaît, dans d'autres non. Ce message n'apparaît pas immédiatement. Le plus souvent cela se passe sur la lecture d'un fichier suivant l'appel du programme (C). Le fait d'aligner la taille des paramètres et tout rentre dans l'ordre.

N'y a-t-il pas un moyen afin qu'il ne perde pas la position mémoire et donc que cela ne provoque pas de plantage ?

Merci pour l'aide apportée.

cmasse
Site Admin
Messages : 772
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

attention

Message par cmasse »

Voilà de mon point de vue quelque chose de dangereux !!!

vous dites que A possède une variable XX de, mettons 2000c., et la transmet à C qui lui attend 9999.

le passage de paramètre se fait par pointeur (c'est ce qui permet à nos paramètres d'être en entrée/sortie).

Donc C reçoit l'adresse de la variable XX qui fait 2000 dans A et modifie cette variable, il modifie donc 9999c (puisque que vous avez déclaré 9999) à partir du début de XX.

qu'il y-t-il entre 2000 et 9999 ??? (je crains le pire)

il est de votre responsabilité de fixer les paramètres de même taille, sinon .....
Christian Massé (Volubis.fr)

cyril.clemenceau
Messages : 3
Enregistré le : jeu. 19 mai 2011, 16:00:52

Message par cyril.clemenceau »

Le sujet date un peu mais bon. Je confirme que cette pratique est dangereuse.

Il existe la possibilité de déclarer des paramètres varying. Ou alors, on peut aussi passer un pointeur vers la variable ainsi que la longueur de la zone. ça fait un peu plus de travail, mais ça permet de garder le programme C générique.

Répondre