Wychodzenie poza zakres tablicy, czy to mozliwe?
Ostatnio zmodyfikowano 2015-05-25 21:48
empty2102 Temat założony przez niniejszego użytkownika |
Wychodzenie poza zakres tablicy, czy to mozliwe? » 2015-05-25 20:59:43 Cześć wszystkim forumowiczom, aktualnie przerabiam kurs c++ poziom 2 tablice jednowymiarowe, z ciekawosci zaczalem bawic sie i testowac program wiec mam jedno pytanie otóż wg kursu wychodzenie poza tablice powinno mi wyrzucic blad krytyczny aplikacji, w moim przypadku tak nie jest. Uzywam codeblocka 12.11 kompilator mingw32-g++. Z ciekawości sprawdziłem to przez couta i tablica zadeklarowana na 20 elementow przyjmuje takze 21szy element. Jest to mozliwe, czy myle sie? kod: #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
int losowanie() { int x =( rand() % 7 ) + 4; return x; } void wczytywanie() { int i = 0; int tablica[ 20 ]; do { tablica[ i ] = losowanie(); cout << "twoje i: " << i << endl; cout << tablica[ i ] << endl; i++; } while( i <= 20 ); cout << "tablica[20]=" << tablica[ 20 ] << endl; i = 1; int suma = tablica[ 0 ]; do { suma = suma + tablica[ i ]; i++; } while( i <= 20 ); cout << "suma wynosi: " << suma << endl; }
int main() { srand( time( NULL ) ); wczytywanie(); return 0; } |
|
pekfos |
» 2015-05-25 21:38:38 otóż wg kursu wychodzenie poza tablice powinno mi wyrzucic blad krytyczny aplikacji |
Gdyby tak było, życie było by łatwiejsze. To nie musi wyrzucić błędu. Nie jest to w żaden sposób sprawdzane, a pamięć komputera nie ogranicza się do tej twojej niewielkiej tablicy. Przed i po niej też jest pamięć i są tam dane, mniej lub bardziej istotne. Możesz sobie tam pisać, w najlepszym przypadku błąd wystąpi od razu. Jeśli jednak się tak nie stanie, będziesz mieć do czynienia z prawdopodobnie najgorszymi błędami, jakich można się w C++ nabawić - coś, gdzieś wyjdzie ci o ten jeden element poza tablicę i nadpisze pamięć, należącą do zupełnie innego miejsca w kodzie, nie wywołując błędu i nie dając żadnych objawów. Wykonanie dochodzi do tego innego miejsca i wtedy aplikacja się sypie. Ten kod jest dobry, wadliwy jest gdzieś po przeciwnej stronie projektu, który może mieć dziesiątki tysięcy linii kodu. |
|
empty2102 Temat założony przez niniejszego użytkownika |
» 2015-05-25 21:48:07 Dziękuję Ci za tak wyczerpującą odpowiedź, teraz rozumiem dlaczego jest to tak ważne, po twoim poście będę mocno zwracał uwagę na takie niby drobnostki ale za to jakie ważne :) Wybacz że nie oprawiłem kodu w znaczniki, więcej się to nie powtórzy. |
|
« 1 » |