Temat: Stack around the variable 'x' was corrupted
Jeżeli podczas uruchomienia programu otrzymujemy tego typu błąd, to najczęściej oznacza on, że w programie wyszliśmy gdzieś za daleko w pamięć.
Sytuacja taka może nastąpić podczas nieprawidłowego indeksowania tablic.
Musimy pamiętać, że tablice w C indeksowane są od zera, czyli dla 10-elementowej tablicy zadeklarowanej jako:
int tab[10];
pierwszy element to tab[0], a ostatni tab[9].
Na przykład dla poniższego programu:
int main(void) {
int i;
int tab[10];
for (i=0;i<=10;++i) {
tab[i] = i + 1;
}
return EXIT_SUCCESS;
}
W trakcie działania pętli for, zmienna "i" osiągnie wartość 10, co spowoduje próbę odwołania do elementu tablicy tab[10], który jest już poza zarezerwowanym dla tablicy obszarem pamięci.
Jeżeli otrzymujemy tego typu błędy, należy dokładnie przejrzeć program w poszukiwaniu tego typu sytuacji, tym bardziej, że taki błąd może pojawić się dopiero na końcu działania programu, a nie w chwili kiedy rzeczywiście nastąpiło błędne odwołanie do pamięci.
W przypadku podanego wyżej przykładu, należy zmienić warunek stopu pętli for:
int main(void) {
int i;
int tab[10];
for (i=0;i<10;++i) {
tab[i] = i + 1;
}
return EXIT_SUCCESS;
}