Erreur hors de portée du vecteur C ++ C ++

Erreur hors de portée du vecteur C ++ C ++
Lorsqu'une erreur hors de portée indice est émise par un programme C ++, alors l'indice utilisé pour accéder à un élément du vecteur est en dehors de la plage des index vectoriels. Cependant, cela dépend du compilateur. Avec le compilateur G ++ pour Ubuntu, lorsque l'indice est en dehors de la plage, la valeur par défaut ou une autre valeur est renvoyée, ou comprise comme étant là à la cellule. Cela ne se produit que lorsque le vecteur est déjà défini avec certains éléments. Avec le compilateur G ++, lorsque le vecteur est déclaré sans aucun élément, et une tentative est faite pour accéder à un emplacement de mémoire connexe (sans aucun élément), en utilisant un entier d'indice (même 0), le compilateur G ++ émet l'erreur: « Segmentation fault (core dumped)".

Avant de continuer à lire, il est nécessaire de se rappeler ce qui suit: Un indice est l'index entre crochets pour le nom du vecteur. Cet index est utilisé pour référencer l'élément du vecteur. Chaque index fait référence à un élément particulier (valeur). Le comptage d'index commence à partir de 0 et se termine à Vecortize - 1. Donc, si un vecteur a 10 éléments, le premier élément est à l'index 0 et que le dixième élément est à l'index 9. Utilisation de l'index 10 sur le vecteur pour lire ou modifier la valeur d'un élément à l'index 10, qui n'existe pas, devrait diffuser un message d'erreur hors de portée. Cependant, avec le compilateur G ++, tant qu'un vecteur a été défini (mémoire allouée aux éléments, même si ce sont des éléments par défaut), lorsqu'un index en dehors de la plage est utilisé, la valeur par défaut du type d'élément vectoriel ou une autre La valeur du type est renvoyée (ou y a-t-il pour modifier).

Illustration hors gamme

Considérez le tableau suivant:

UN B C D E F g H je J
-2 -1 0 1 2 3 4 5 6 7 8 9 dix 11

La première ligne montre comment dix allocations de mémoire ont été faites pour 10 caractères. Sous les caractères du tableau, dans la deuxième ligne, se trouvent les indices corrects (index). En utilisant l'indice -1, -2, -3, etc., devrait entraîner une erreur hors de portée émise. Utilisation de l'indice 10, 11, 12, etc., devrait également entraîner une erreur hors de portée émise.

Cet article illustre les situations dans lesquelles des erreurs hors de portée sont émises. Le compilateur utilisé pour les échantillons de code dans cet article est le compilateur G ++ pour Ubuntu. N'oubliez pas d'inclure la bibliothèque vectorielle dans le programme, pour tout compilateur.

Erreur hors de portée pour le vecteur défini

Un vecteur défini est celui pour lequel la mémoire a été allouée pour les éléments initiaux. Les valeurs peuvent être des valeurs par défaut ou pratiques pour le type d'élément vectoriel. Un vecteur déclaré sans aucune forme d'initialisation n'est pas un vecteur défini. Pour un tel vecteur, il n'y a pas d'allocation de mémoire pour aucun élément vectoriel. Un tel vecteur est vide.

Compilateur G ++ pour Ubuntu

Supposons qu'il y a dix éléments dans un vecteur; Une erreur pas rare commise par les personnes inexpérimentées dans la programmation, consiste à accéder au dixième élément avec l'indice de 10. Il doit être accessible avec l'indice de 9, car le comptage d'index commence à partir de 0. Considérez le programme suivant avec 10 éléments dans le vecteur et l'accès du dixième élément avec l'indice de 10:

#inclure
#inclure
Utilisation de Namespace Std;
int main()

vectorvtr = 'a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h', 'i', 'j';
char ch = vtr [10]; // Instruction d'erreur
couter<retour 0;

Ce programme avec le compilateur G ++ pour Ubuntu donne une sortie de ", qui est un caractère de rien (pas d'espace). Un caractère de rien est le caractère par défaut des caractères en c++. Il n'y a pas de onzième terme pour ce vecteur. Ainsi, la deuxième instruction est une déclaration d'erreur qui n'est pas détectée par le compilateur G ++. Avec le compilateur G ++, il n'est toujours pas détecté au moment de l'exécution, et le programme fonctionne à tort.

Quelques autres compilateurs

Lorsque le programme ci-dessus est utilisé avec certains autres compilateurs, l'instruction d'erreur est détectée lors de l'exécution et une exception est lancée avec un message d'erreur émis à la sortie. L'erreur n'est toujours pas détectée au moment de la compilation, cependant.

Considérez la déclaration suivante:

vecteur vtr (10);

Cela peut ne pas ressembler à une définition, mais c'est une définition. Il y a dix emplacements de mémoire pour les dix éléments vectoriels avec la valeur de caractère par défaut.

Erreur hors de portée pour le vecteur non défini

Un vecteur déclaré sans aucune forme d'initialisation n'est pas un vecteur défini. Pour un tel vecteur, il n'y a pas d'allocation pour un élément vectoriel. Un tel vecteur est vide.

Compilateur G ++ pour Ubuntu

Lorsqu'un vecteur déclaré n'a pas d'initialisation (ou n'a pas de valeurs par défaut), l'utilisation de l'indice n'est pas applicable au vecteur pour accéder à un élément du vecteur car il n'y a pas. Même l'index zéro ne peut pas être utilisé pour accéder au premier élément, qui n'est pas présent. Dans le programme suivant, une tentative est faite pour accéder au premier élément, qui n'est pas présent:

#inclure
#inclure
Utilisation de Namespace Std;
int main()

VectorVtr;
char ch = vtr [0]; // Instruction d'erreur
couter<retour 0;

La première instruction de la fonction principale déclare un vecteur sans aucun emplacement de mémoire pour aucun de ses éléments. Cette déclaration n'est pas une définition. La deuxième instruction tente de lire la valeur à l'index 0. Il s'agit d'une instruction d'erreur car le vecteur n'a pas d'élément, et donc aucun élément n'est présent à un index zéro.

Avec le compilateur G ++, le programme compile avec succès, mais au moment de l'exécution, lorsque la deuxième instruction de la fonction principale est atteinte, le programme s'arrête et que le message d'erreur suivant est émis:

Segmentation fault (core dumped)

Quelques autres compilateurs

L'exécution du programme ci-dessus dans d'autres compilateurs, et notant que leurs messages d'erreur correspondants sont laissés comme un exercice au lecteur.

Conclusion

L'erreur hors de portée de l'indice vectoriel se produit lorsqu'une tentative est faite pour accéder à un élément vectoriel à l'aide d'un indice qui est en dehors de la plage d'index. L'erreur hors de portée n'est pas la même.