Error de fuera de rango de C ++ Vector Vector

Error de fuera de rango de C ++ Vector Vector
Cuando un programa de C ++ emite un error de subíndice fuera de rango, entonces el subíndice utilizado para acceder a un elemento del vector está fuera del rango de los índices de vectores. Sin embargo, esto depende del compilador. Con el compilador G ++ para Ubuntu, cuando el subíndice está fuera del rango, el valor predeterminado o algún otro valor se devuelve, o se entiende que está allí en la celda. Esto solo sucede cuando el vector ya está definido con algunos elementos. Con el compilador G ++, cuando el vector se declara sin ningún elemento, y se intenta acceder a una ubicación de memoria relacionada (sin ningún elemento), utilizando cualquier entero de subíndice (incluso 0), el compilador G ++ emite el error: "" Falla de segmentación (arrojado núcleo) ".

Antes de continuar leyendo, es necesario recordar lo siguiente: un subíndice es el índice de soportes cuadrados para el nombre del vector. Este índice se utiliza para hacer referencia al elemento del vector. Cada índice se refiere a un elemento particular (valor). El conteo de índice comienza desde 0 y termina en VectorSize - 1. Entonces, si un vector tiene 10 elementos, el primer elemento está en el índice 0 y el décimo elemento está en el índice 9. Usar el índice 10 en el vector para leer o cambiar el valor de un elemento en el índice 10, que no existe, en caso de transmitir un mensaje de error fuera de rango. Sin embargo, con el compilador G ++, siempre que se haya definido un vector (la memoria asignada para los elementos, incluso si son elementos predeterminados), cuando se usa un índice fuera del rango, el valor predeterminado del tipo de elemento vector Se devuelve el valor del tipo (o está ahí para ser cambiado).

Ilustración fuera de rango

Considere la siguiente tabla:

A B C D mi F GRAMO H I J
-2 -1 0 1 2 3 4 5 6 7 8 9 10 11

La primera fila muestra cómo se han realizado diez asignaciones de memoria para 10 caracteres. Debajo de los caracteres de la tabla, en la segunda fila, están los subíndices correctos (índices). Usando el subíndice -1, -2, -3, etc., debe dar como resultado un error fuera de rango emitido. Uso del subíndice 10, 11, 12, etc., también debe dar como resultado un error fuera de rango emitido.

Este artículo ilustra situaciones en las que se emiten errores fuera de rango. El compilador utilizado para las muestras de código en este artículo es el compilador G ++ para Ubuntu. No olvide incluir la biblioteca vectorial en el programa, para cualquier compilador.

Error fuera de rango para el vector definido

Un vector definido es uno para el cual se ha asignado memoria para los elementos iniciales. Los valores pueden ser valores predeterminados o prácticos para el tipo de elemento vectorial. Un vector declarado sin ninguna forma de inicialización no es un vector definido. Para tal vector, no hay asignación de memoria para ningún elemento vectorial. Tal vector está vacío.

Compilador G ++ para Ubuntu

Suponga que hay diez elementos en un vector; Un error no raro cometido por las personas sin experiencia en la programación, es acceder al décimo elemento con el subíndice de 10. Se debe acceder con el subíndice de 9, ya que el recuento de índice comienza desde 0. Considere el siguiente programa con 10 elementos en el vector y el acceso del décimo elemento con el índice de 10:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

vectorvtr = 'a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h', 'i', 'j';
char ch = vtr [10]; // Declaración de error
cout<regresar 0;

Este programa con el compilador G ++ para Ubuntu da una salida de ", que es un personaje de nada (sin espacio). Un personaje de nada es el personaje predeterminado para personajes en C++. No hay undécimo término para este vector. Entonces, la segunda declaración es una declaración de error que el compilador G ++ no detecta. Con el compilador G ++, todavía no se detecta en tiempo de ejecución, y el programa funciona mal.

Algunos otros compiladores

Cuando el programa anterior se usa con otros compiladores, la declaración de error se detecta en tiempo de ejecución, y se lanza una excepción con un mensaje de error emitido en la salida. Sin embargo, el error aún no se detecta en el momento de la compilación.

Considere la siguiente declaración:

vector VTR (10);

Esto puede no parecer una definición, pero es una definición. Hay diez ubicaciones de memoria para los diez elementos vectoriales con el valor de carácter predeterminado.

Error fuera de rango para vector indefinado

Un vector declarado sin ninguna forma de inicialización no es un vector definido. Para tal vector, no hay asignación para ningún elemento vectorial. Tal vector está vacío.

Compilador G ++ para Ubuntu

Cuando un vector declarado no tiene inicialización (o no tiene valores predeterminados), el uso de subíndice no es aplicable al vector al acceder a cualquier elemento del vector, ya que no hay. Incluso el índice cero no se puede usar para acceder al primer elemento, que no está presente. En el siguiente programa, se intenta acceder al primer elemento, que no está presente:

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

vectorvtr;
char ch = vtr [0]; // Declaración de error
cout<regresar 0;

La primera declaración en la función principal declara un vector sin ninguna ubicación de memoria para cualquiera de sus elementos. Esta declaración no es una definición. La segunda declaración intenta leer el valor en el índice 0. Esta es una declaración de error porque el vector no tiene elemento, por lo que ningún elemento está presente en ningún índice cero.

Con el compilador G ++, el programa se compila correctamente, pero en tiempo de ejecución, cuando se alcanza la segunda declaración en la función principal, el programa se detiene y se emite el siguiente mensaje de error:

Falla de segmentación (núcleo arrojado)

Algunos otros compiladores

La ejecución del programa anterior en otros compiladores, y observar sus mensajes de error correspondientes se deja como un ejercicio para el lector.

Conclusión

El error de fuera de rango de subíndice vectorial se produce cuando se intenta acceder a un elemento vectorial utilizando un subíndice que está fuera del rango de índice. El error fuera de rango no es lo mismo que la falla de segmentación (arrojado núcleo) todo el tiempo.