[Poziom 2] Tablica wychodząca po za zakres
Ostatnio zmodyfikowano 2013-06-13 20:09
Kapuśniaczek96 Temat założony przez niniejszego użytkownika |
[Poziom 2] Tablica wychodząca po za zakres » 2013-06-13 17:32:22 Witam, chodzi mi o przedostatni kod z tego: Funkcje, a słowo kluczowe returnWszystko dla mnie jest prawie zrozumiałe - rozumiem dlaczego wyświetlone zostały takie wyniki, a nie inne ale mam pewien dylemat. Otóż według kodu tablicaLiczb[0] = 123; tablicaLiczb[1] = 321; tablicaLiczb[2] = nie zdefiniowano więc wartość losowa. Ale dlaczego code::block nie wyrzuca mi błędu kiedy przekraczam indeks tablicy tylko kompiluje kod i podaje mi jakąś liczbę. int main() { int liczbaElementow = 0; int tablicaLiczb[ 10 ]; wyswietl( tablicaLiczb, liczbaElementow ); liczbaElementow = dopisz( 123, tablicaLiczb, liczbaElementow ); wyswietl( tablicaLiczb, liczbaElementow ); liczbaElementow = dopisz( 321, tablicaLiczb, liczbaElementow ); wyswietl( tablicaLiczb, liczbaElementow ); std::cout << tablicaLiczb[ 999 ] << std::endl; return 0; }
|
|
pekfos |
» 2013-06-13 18:07:10 Ale dlaczego code::block nie wyrzuca mi błędu kiedy przekraczam indeks tablicy |
Bo Code::Blocks nie jest od tego. Code::Blocks nie jest kompilatorem. To twój program podaje liczbę, a nie Code::Blocks. |
|
Kapuśniaczek96 Temat założony przez niniejszego użytkownika |
» 2013-06-13 18:32:10 To może inaczej. Dlaczego w logach nic nie ma i program wykonuje się poprawnie skoro przekraczam indeks tablicy. Przepraszam za niedostosowanie się do wzoru (dopiero teraz zauważyłem ten link pod zakładaniem tematu i jak m.in umieszczać kod). Jeżeli zaistnieje sytuacja, w której będę miał problem i tutaj napiszę, na pewno się dostosuje. |
|
pekfos |
» 2013-06-13 18:43:05 Przekroczenie tablicy nie musi wywołać błędu. |
|
Berux |
» 2013-06-13 18:43:46 Nie wiem dokładnie, ale wydaje mi się, że wtedy kompilator wyrzuca ostrzeżenie i (być może) masz wyłączone pokazywanie ostrzeżeń w logu. /edit: Uwaga! Przy używaniu tablic trzeba być szczególnie ostrożnym przy konstruowaniu pętli, ponieważ ani kompilator, ani skompilowany program nie będą w stanie wychwycić przekroczenia przez indeks rozmiaru tablicy [1]. Efektem będzie odczyt lub zapis pamięci, znajdującej się poza tablicą. |
Źródło: http://pl.wikibooks.org/wiki/C/Tablice |
|
pekfos |
» 2013-06-13 18:48:39 Nie wiem dokładnie, ale wydaje mi się, że wtedy kompilator wyrzuca ostrzeżenie |
O jakim kompilatorze mówisz? |
|
Berux |
» 2013-06-13 18:49:29 @up
Raczej o GCC. |
|
pekfos |
» 2013-06-13 18:52:32 GCC (4.7.2) nic nie wspomina o przekraczaniu tablic. Nawet z włączonymi wszystkimi ostrzeżeniami. |
|
« 1 » 2 |