Tablice, coś co nie powinno działać działa
Ostatnio zmodyfikowano 2016-07-25 15:10
Maciekb Temat założony przez niniejszego użytkownika |
Tablice, coś co nie powinno działać działa » 2016-07-25 13:12:53 #include <iostream> using namespace std; int main() { int liczba[ 10 ]; int licznik = 0; do { std::cin >> liczba[ licznik ]; licznik++; } while( licznik < 11 ); liczba[ 20 ] = 18; cout << liczba[ 20 ]; std::cout << "Podales nastepujace liczby: "; licznik = 0; do { std::cout << liczba[ licznik ] << ", "; licznik++; } while( licznik < 11 ); return 0; }
Program grzecznie się kompiluje i działa mimo że, wychodzę poza zakres tablicy wypisuje: 18, 1,2,3,4,5,6,7,8,9,10,10. Dlaczego?, proszę o pomoc. |
|
BlackFive |
» 2016-07-25 13:37:08 drugi link na samym dole...
http://lmgtfy.com/?q=c%2B%2B+wyj%C5%9Bcie+poza+tablice\ |
|
Maciekb Temat założony przez niniejszego użytkownika |
» 2016-07-25 14:05:22 W linku jest o programowaniu obiektowym a ja dopiero raczkuje w c++, nie rozumiem tego, chciałbym się dowiedzieć dlaczego tak się dzieje i jak uniknąć błędów które to może powodować :) |
|
Gibas11 |
» 2016-07-25 14:18:51 Pamięć nie musi być dokładnie pilnowana, równie dobrze możesz nie naruszać żadnych ważnych danych. Jak masz szczęście to wysypuje się od razu, jak pecha to wysypuje się po miesiącu cholera wie dlaczego. ;) W każdym razie lepiej tego pilnuj. |
|
carlosmay |
» 2016-07-25 14:32:46 chciałbym się dowiedzieć dlaczego tak się dzieje i jak uniknąć błędów które to może powodować :) |
Kompilator nie sprawdza poprawności indeksu. Ten obowiązek spoczywa na programiście. Korzystaj z std::array. To jest opakowana tablica statyczna. Dam przykład: #include <iostream> #include <array> using namespace std;
int main() { array < int, 10 > furtherNumbers; for( int i = 0; i < furtherNumbers.size(); ++i ) { furtherNumbers[ i ] = i + 1; } for( int i = 0; i < furtherNumbers.size(); ++i ) { cout << furtherNumbers[ i ] << ' '; } cout << furtherNumbers.at( 10 ) << '\n'; }
Kwestia przywyknięcia do składni. std::array<> |
|
BlackFive |
» 2016-07-25 15:10:26 Użyj kolego google bo tam jest więcej wiedzy niż na wikipedii... http://cpp0x.pl/kursy/Kurs-C++/Poziom-2/Tablice-jednowymiarowe/292 "Najczęstszym błędem, jaki jest popełniany przez początkujących programistów (jak również i tych bardziej doświadczonych) jest wychodzenie poza zakres tablicy. Przykładowo: int tablica[ 10 ]; tablica[ 10 ] = 123;
Pisząc poza tablicą modyfikujesz wartości innych zmiennych lub kodu maszynowego aplikacji - w efekcie uszkadzasz kod swojego programu co prowadzi do błędu krytycznego aplikacji. Wychodząc poza zakres tablicy może się zdarzyć również, że podejmiesz próbę pisania po pamięci innej aplikacji na co współczesne systemy operacyjne nie pozwalają. System operacyjny ochroni Twój komputer przed taką ewentualnością i wyrzuci błąd krytyczny Twojej aplikacji, zapobiegając jednocześnie możliwości modyfikacji zasobów, które do Ciebie nie należały." |
|
« 1 » |