Ho scritto due piccoli programmi in cui dichiaro un array molto piccolo.
Quindi provo ad accedere ai valori fuori dai limiti.
La cosa interessante che ho notato è che quando provo a decrementare l'indice posso decrementarlo molto molto più lontano. Se provo ad incrementarlo, il programma si blocca molto più velocemente.
Questo sono i miei due codici e i risultati:
#include<stdio.h>
int main()
{
int i=0;
int a[2];
while(1)
{
a[-10000]=8;
printf("i is: %d and the value a[i] is: %d\n",i,a[i]);
i--;
}
return 0;
}
Le righe finali del risultato sono:
i è: -3143957 il valore di a [i] è: 0 i è: -3143958 il valore di a [i] è: 0 i è: -3143959 il valore di a [i] è: 0 i è: -3143960 il valore di a [i] è: 0 i è: -3143961 il valore di a [i] è: 0 i è: -3143962 il valore di a [i] è: 0 i è: -3143963 il valore di a [i] è: 0 i è: -3143964 il valore di a [i] è: 0 Errore di segmentazione
Tuttavia quando provo ad incrementare l'indice i
#include<stdio.h>
int main()
{
int i=0;
int a[2];
while(1)
{
a[-10000]=8;
printf("i is: %d and the value a[i] is: %d\n",i,a[i]);
i++;
}
return 0;
}
Ottengo il seguente risultato: i è: 2306 e il valore a [i] è: 1869098813 i è: 2307 e il valore a [i] è: 1764713837 i è: 2308 e il valore a [i] è: 1634624869 i è: 2309 e il valore a [i] è: 795175011 i è: 2310 e il valore a [i] è: 1802724676 i è: 2311 e il valore a [i] è: 7368564 i è: 2312 e il valore a [i] è: 778121006 i è: 2313 e il valore a [i] è: 7632239 i è: 2314 e il valore a [i] è: 0 i è: 2315 e il valore a [i] è: 0
La differenza tra quanto posso salire e quanto posso andare giù è ENORME. Perché è così.
Alcune cose da menzionare: SO che questo è un comportamento indefinito. La mia domanda è strettamente su PERCHÉ posso andare molto più in alto rispetto a GIU quando si esce da una serie di array.