Bounds Index checking ( Checando índice limite do vetor )
Um método utilizado em programação para evitar referenciar itens que ultrapassem os limites de um vetor afim de controlar o problema de maneira segura. Em linguagens de mais alto nível como Java e C# este artificio já é implementado automaticamente gerando uma exceção que pode ser controlada pelo programa, porém existe o custo em tempo de execução desta verificação, afinal toda vez que é necessário referenciar um item do vetor esta verificação será feita. Linguagens como C e C++ não implementam automaticamente esta verificação e deixam a responsabilidade para o programador que pode optar por mais segurança ou evitar a verificação e tornar a execução mais rápida. Apesar de haver uma grande discussão sobre este assunto onde uns acham que o ganho de performance não vale o risco o fato é que a alternativa existe para cada programador escolher em seu caso qual a alternativa melhor para seu contexto.
Ex.:
#include
#define SIZE_VETOR 7
char vetor[SIZE_VETOR] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g' }; //Escopo Global
void getItem( int indice, char * out ){
*out = vetor[indice];
};
int main( int argc, char ** argv, char ** argenv ){
char c = 0;
getItem(0, &c); //neste momento foi referenciado o item 0 do vetor sendo o valor 'a' OK
printf( "%c", c );
getItem(6, &c); //neste momento foi referenciado o item 6 do vetor sendo o valor 'g' OK
printf( "%c", c );
getItem(10, &c); //neste momento foi referenciado o item 10 do vetor FALHA
printf( "%c", c );
return 1;
};
Uma maneira de evitar o crash de seu sistema e o mesmo ser finalizado abruptamente na linha onde sinalizei a falha seria efetuar uma checagem antes de referenciar afim de identificar o problema e tratá-lo da melhor forma possível, uma forma bem didática seria efetuar um if antes de cada referencia e tratar o erro para isso seria necessário modificar a função getItem:
#include
#define SIZE_VETOR 7
char vetor[SIZE_VETOR] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g' }; //Escopo Global
int getItem( int indice, char * out ){
if( indice < SIZE_VETOR && indice > SIZE_VETOR )
*out = vetor[indice];
return 1; //SUCESSO
else
*out = -1; //FALHA
return 0;
};
int main( int argc, char ** argv, char ** argenv ){
char c = 0;
if( getItem(0, &c) //neste momento foi referenciado o item 0 do vetor sendo o valor 'a' OK
printf( "%c", c );
else
printf( "ERRO: índice incorreto" );
if( getItem(6, &c) //neste momento foi referenciado o item 6 do vetor sendo o valor 'g' OK
printf( "%c", c );
else
printf( "ERRO: índice incorreto" );
printf( "%c", c );
else
printf( "ERRO: índice incorreto" );
return 1;
};