Ciao a tutti,
oggi a lezione un ragazzo ha posto un quesito al quale il prof ha risposto semplicemente dicendo che bisognava evitare che ciò che sto per spiegare accadesse, ma non ha detto cosa succede se ciò che bisogna evitare, accadesse....
mi sono spiegato male ma capirete:
supponiamo di avere l'algoritmo di ricerca di una variabile x in un array di n elementi (che però non la contiene):
es: vogliamo cercare il valore 4 in un array di 5 elementi composto dai numeri 1,2,3,5,6
...
...
int a[5] = {1,2,3,5,6}, i=0;
...
...
do
{
i++;
}
while( x= A[i] || i>5);
...
...
il ciclo funziona, è corretto e se eseguito non da alcun problema ma il mio dubbio nasce quando i=5 e il valore non è stato ovviamente ancora trovato.
se ci trovassimo in questa situazione, il while dopo aver eseguito le istruzioni tra parentesi graffe (in questo caso solo i++) controlla se è stato trovato un elemento uguale all'elemento che noi stiamo cercando (falso) oppure se i (che vale 5) è >5 (falso).
In questo caso il ciclo viene ripetuto un'ultima volta con i=6.
Quando il programma (ormai in esecuzione) va a controllare se x=A[6], perchè non da un errore? in pratica si cerca di confrontare una variabile (x) col contenuto di una locazione di memoria (A[6]) che non è stata affatto dedicata all'array!
Che succede in questo caso? Perchè non vengono segnalati errori anche se A[6] NON esiste?
(lasciamo stare il fatto che quando si va a controllare se i>5 si esce dal ciclo....non è quello il problema xD)
Vi assicuro che è difficile spiegare questo problema scrivendolo in un semplice messaggio![]()