Antes de continuar a ler, é necessário recordar o seguinte: Um subscrito é o índice entre colchetes para o nome do vetor. Este índice é usado para referir o elemento do vetor. Cada índice refere -se a um determinado elemento (valor). A contagem do índice começa a partir de 0 e termina em Vettorsize - 1. Portanto, se um vetor tiver 10 elementos, o primeiro elemento está no índice 0 e o décimo elemento está no índice 9. Usando o índice 10 no vetor para ler ou alterar o valor de um elemento no índice 10, que não existe, deve gerar uma mensagem de erro fora de alcance. No entanto, com o compilador G ++, desde que um vetor tenha sido definido (a memória alocada para os elementos, mesmo que sejam elementos padrão), quando um índice fora do intervalo é usado, o valor padrão do tipo de elemento vetorial ou algum outro outro O valor do tipo é retornado (ou está lá para ser alterado).
Ilustração fora do alcance
Considere a tabela a seguir:
A | B | C | D | E | F | G | H | EU | J | ||||
-2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
A primeira linha mostra como dez alocações de memória foram feitas para 10 caracteres. Abaixo dos caracteres da tabela, na segunda linha, estão os subscritos corretos (índices). Usando o subscrito -1, -2, -3, etc., deve resultar em erro fora de alcance emitido. Usando o subscrito 10, 11, 12, etc., também deve resultar em erro fora de alcance emitido.
Este artigo ilustra situações nas quais os erros fora da faixa são emitidos. O compilador usado para as amostras de código neste artigo é o compilador G ++ para o Ubuntu. Não se esqueça de incluir a biblioteca vetorial no programa, para qualquer compilador.
Erro fora do alcance para vetor definido
Um vetor definido é aquele para o qual a memória foi alocada para os elementos iniciais. Os valores podem ser valores padrão ou práticos para o tipo de elemento vetorial. Um vetor declarado sem qualquer forma de inicialização não é um vetor definido. Para esse vetor, não há alocação de memória para qualquer elemento vetorial. Esse vetor está vazio.
Compilador G ++ para Ubuntu
Suponha que haja dez elementos em um vetor; Um erro não incomum cometido por pessoas inexperientes na programação, é acessar o décimo elemento com o subscrito de 10. Deve ser acessado com o subscrito de 9, pois a contagem de índices começa de 0. Considere o seguinte programa com 10 elementos no vetor e o acesso ao décimo elemento com o índice de 10:
#incluirEste programa com o compilador G ++ para o Ubuntu fornece uma saída de ", que é um personagem de nada (sem espaço). Um personagem de nada é o personagem padrão para os caracteres em C++. Não há décimo primeiro termo para este vetor. Portanto, a segunda declaração é uma declaração de erro que não é detectada pelo compilador G ++. Com o compilador G ++, ele ainda não é detectado em tempo de execução, e o programa opera incorretamente.
Alguns outros compiladores
Quando o programa acima é usado com alguns outros compiladores, a declaração de erro é detectada em tempo de execução e uma exceção é lançada com uma mensagem de erro emitida na saída. O erro ainda não é detectado no momento da compilação, embora.
Considere a seguinte declaração:
vetorIsso pode não parecer uma definição, mas é uma definição. Existem dez locais de memória para os dez elementos vetoriais com o valor padrão do caractere.
Erro fora de alcance para vetor indefinido
Um vetor declarado sem qualquer forma de inicialização não é um vetor definido. Para esse vetor, não há alocação para nenhum elemento vetorial. Esse vetor está vazio.
Compilador G ++ para Ubuntu
Quando um vetor declarado não possui inicialização (ou não tem valores padrão), o uso de subscrito não é aplicável ao vetor no acesso a qualquer elemento do vetor, pois não há não. Mesmo o índice zero não pode ser usado para acessar o primeiro elemento, que não está presente. No programa a seguir, é feita uma tentativa de acessar o primeiro elemento, que não está presente:
#incluirA primeira declaração na função principal declara um vetor sem qualquer local de memória para qualquer um de seus elementos. Esta afirmação não é uma definição. A segunda declaração tenta ler o valor no índice 0. Esta é uma declaração de erro porque o vetor não tem elemento e, portanto, nenhum elemento está presente em nenhum índice zero.
Com o compilador G ++, o programa compila com sucesso, mas em tempo de execução, quando a segunda declaração na função principal é alcançada, o programa para e a seguinte mensagem de erro é emitida:
falha de segmentação (despejo de núcleo)Alguns outros compiladores
Execução do programa acima em outros compiladores, e observando que suas mensagens de erro correspondentes são deixadas como um exercício ao leitor.
Conclusão
O erro do subscrito vetorial ocorre quando uma tentativa é feita para acessar um elemento vetorial usando um subscrito que está fora do intervalo de índice. O erro fora de alcance não é o mesmo que a falha de segmentação (Core Dumped) o tempo todo.