Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Poziom 2] Tablica wychodząca po za zakres

Ostatnio zmodyfikowano 2013-06-13 20:09
Autor Wiadomość
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:
» Kurs C++ » Poziom 2Funkcje, a słowo kluczowe return lekcja

Wszystko 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ę.

C/C++
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; /// Tutaj mój problem
    return 0;
}
P-85488
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.

tylko kompiluje kod
Code::Blocks nie jest kompilatorem.

podaje mi jakąś liczbę.
To twój program podaje liczbę, a nie Code::Blocks.
P-85491
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.
P-85501
pekfos
» 2013-06-13 18:43:05
Przekroczenie tablicy nie musi wywołać błędu.
P-85504
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
P-85505
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?
P-85507
Berux
» 2013-06-13 18:49:29
@up

Raczej o GCC.
P-85508
pekfos
» 2013-06-13 18:52:32
GCC (4.7.2) nic nie wspomina o przekraczaniu tablic. Nawet z włączonymi wszystkimi ostrzeżeniami.
P-85510
« 1 » 2
  Strona 1 z 2 Następna strona