Bonjour,
Il m'est arrivé plusieurs fois d'être confronté à des plantages de programmes de traitement d'images, qui intervenaient lors de leur exécution, après que leur compilation se soit bien passée.
Quelques recherches ont permis de vérifier que le blocage était lié à la déclaration d'une variable tableau de volume suffisamment important, comme on peut le voir sur les exemples suivants, délibérément simplifiés, dans lesquels intervient une matrice carrée d'entiers longs:
# Premier programme, réalisant l'initialisation de tous les éléments de la variable:
Ici l'exécution se déroule comme prévu.
Code Pascal : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 PROGRAM Var_Tableau; USES Crt; CONST Max = 5000; TYPE Tab_E = ARRAY[0..Max, 0..Max] OF LongInt; VAR Matrice: Tab_E; PROCEDURE Calc_M1(VAR M_: Tab_E); VAR i, j: Word; BEGIN FOR i:= 0 TO Max DO FOR j:= 0 TO Max DO BEGIN M_[i, j]:= 555555; GotoXY(10, 15); Write(i:4) END; ReadLn END; BEGIN Calc_M1(Matrice) END.
# Second programme, proche du précédent:
Bien que la compilation se déroule là encore avec succès, le lancement du programme est immédiatement suivi de son arrêt, avec l'affichage suivant:
Code Pascal : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 PROGRAM Var_Tableau; USES Crt; CONST Max = 5000; TYPE Tab_E = ARRAY[0..Max, 0..Max] OF LongInt; PROCEDURE Calc_M2; VAR i, j: Word; Matrice: Tab_E; BEGIN FOR i:= 0 TO Max DO FOR j:= 0 TO Max DO BEGIN Matrice[i, j]:= 555555; GotoXY(10, 15); Write(i:4) END; ReadLn END; BEGIN Calc_M2 END.
dès que l'on a Max > 507.
Le plantage est donc déclenché dès lors que Matrice devient une variable locale de taille supérieure à environ 1 Mo (1032256). Cette difficulté se contourne bien sûr aisément, mais elle apparaît regrettable dans la mesure où il s'agissait, dans les programmes antérieurs beaucoup plus vastes, d'un simple intermédiaire de calcul conduisant à toute autre chose (en l'occurrence, un tableau de pixels).
Je ne comprend pas l'origine de cette contrainte, et n'ai pas trouvé sur la Toile d'informations claires.
Quelqu'un peut-il me fournir des indications sur le sujet ?
Y a-t-il des variantes envisageables pour la programmation, pas ex. l'intervention de pointeurs, qui permettraient de garder Matrice comme variable locale ?
De quelle expression le terme "XCPT" est-il l'abréviation ? Beaucoup de messages d'erreur me paraissent totalement hermétiques.
Merci d'avance, pour toutes vos réponses.
Partager