On liste ici les situations d'erreur captées par le mécanisme throw/try/catch. Une situation d'erreur donnée (par exemple un indice hors limites) peut se rencontrer dans plusieurs services sur les tableaux. Et tous les services sur les tableaux ne révèlent pas des situations d'erreur.
- L'ensemble des services de bas niveau sur les tableaux dont le code est équipé pour lancer une ou l'autre des exceptions (par throw) est indiqué dans chaque item ci-dessous.
Dans son propre code, le développeur pourra inclure dans un bloc try les appels à ces services, et seulement ceux-là, s'agissant des tableaux.- Les exceptions qui sont lancées (par throw) sont aussi indiquées dans chaque item ci-dessous. Le développeur a tout intérêt à transmettre cette information à son capteur d'exception (catch), afin de préciser le message d'erreur.
- Les capteurs d'exception (catch) sont à la discrétion du développeur, mais DIESE en fournit un pour chaque type d'erreur qui fait l'objet, dans son propre code, d'une émision par throw.
On liste ci-dessous les capteurs prédéfinis. L'édition du message d'erreur y est suivie de l'arrêt du programme. Le message édité donne une indication sur la portion de code applicatif qui a appelé le service en situation d'erreur.
TabIndexOutOfRange : On fait référence à un élément du tableau, mais avec un indice invalide, c'est-à-dire en dehors de ses limites en mémoire. Les services de bas niveau qui rencontrent cette erreur sont, avec l'exception correspondante :
l'opérateur []Y/C] : OUT_OF_TAB_RANGE_OP
les méthodes suivantes :
get_nth : OUT_OF_TAB_RANGE_GET_NTH
insert : OUT_OF_TAB_RANGE_INSERT
remove : OUT_OF_TAB_RANGE_REMOVE
remove_from : OUT_OF_TAB_RANGE_REMOVE_FROM
remove_to : OUT_OF_TAB_RANGE_REMOVE_TO
replace_by_list : OUT_OF_TAB_RANGE_REPLACE_L
replace_by_item : OUT_OF_TAB_RANGE_REPLACE_I
void UnCodeAppelant() { Tableau<int>* tab = new Tableau<int>(0, 10); // un tableau de 10 éléments tous égaux à 0 try { int index = f(); // une fonction retournant un entier int k = (*tab)[index]; } catch (int e) { TabIndexOutOfRange(e, "UnCodeAppelant", tab, index, TRUE); } }>> !!!============== TabIndexOutOfRange ============== operator [] : 12 est un indice hors limites pour Tableau 8b60f08 de 10 éléments au cours de l'exécution de 'UnCodeAppelant' !!!============================
VoidArray : On fait référence à un élément d'un tableau qui n'en a pas. Les services de bas niveau qui rencontrent cette erreur sont les méthodes , avec l'exception correspondante :
front : VOID_ARRAY_FRONT
back : VOID_ARRAY_BACK
void UnCodeAppelant() { Tableau<int>* tab = new Tableau<int>(); // un tableau encore vide try { int elem = tab->front(); } catch (int e) { VoidArray(e, "UnCodeAppelant", tab, TRUE); } }>> !!!============== VoidArray ============== front : le Tableau 8b60f08 ne possède aucun élément au cours de l'exécution de 'UnCodeAppelant' !!!============================
MustBePresent : On cherche à enlever un élément d'un tableau, mais cet élément réputé présent est absent. Le service de bas niveau qui rencontre cette erreur est la méthode , avec l'exception correspondante :
remove_first : MUST_BE_PRESENT_REMOVE_FIRST
void UnCodeAppelant() { Tableau<Entity*>* tab = new Tableau<Entity*>(); Entity* pA = new Entity(); Entity* pB = new Entity(); tab->push_back(pA); try { tab->remove_first(pB, TRUE); // TRUE : pB must be present } catch (int e) { MustBePresent(e, "UnCodeAppelant", tab, TRUE); } }>> !!!============== MustBePresent ============== remove_first : le Tableau 8b60f08 ne possède pas l'élément à enlever au cours de l'exécution de 'UnCodeAppelant' !!!============================