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;
}