Tablice dwuwymiarowe nie chcą się kompilować po osiągnięciu 27 pozycji indeksu (table[26][i]).
Ostatnio zmodyfikowano 2013-07-05 20:35
V0ldek Temat założony przez niniejszego użytkownika |
Tablice dwuwymiarowe nie chcą się kompilować po osiągnięciu 27 pozycji indeksu (table[26][i]). » 2013-07-05 20:15:02 Ostatnio dla sportu i rekreacji pracowałem nad prostym translatorem alfabetu łacińskiego na alfabet Morse'a. Największy problem nie sprawił mi jednak sam przekład tekstu, lecz zakodowanie bazy danych. Stworzyłem coś takiego: #include <iostream> #include <cstdlib>
void database( std::string table[][ 2 ] ) { table[ 0 ][ 1 ] = "A"; table[ 1 ][ 1 ] = "B"; table[ 2 ][ 1 ] = "C"; table[ 3 ][ 1 ] = "D"; table[ 4 ][ 1 ] = "E"; table[ 5 ][ 1 ] = "F"; table[ 6 ][ 1 ] = "G"; table[ 7 ][ 1 ] = "H"; table[ 8 ][ 1 ] = "I"; table[ 9 ][ 1 ] = "J"; table[ 10 ][ 1 ] = "K"; table[ 11 ][ 1 ] = "L"; table[ 12 ][ 1 ] = "M"; table[ 13 ][ 1 ] = "N"; table[ 14 ][ 1 ] = "O"; table[ 15 ][ 1 ] = "P"; table[ 16 ][ 1 ] = "Q"; table[ 17 ][ 1 ] = "R"; table[ 18 ][ 1 ] = "S"; table[ 19 ][ 1 ] = "T"; table[ 20 ][ 1 ] = "U"; table[ 21 ][ 1 ] = "V"; table[ 22 ][ 1 ] = "W"; table[ 23 ][ 1 ] = "X"; table[ 24 ][ 1 ] = "Y"; table[ 25 ][ 1 ] = "Z"; table[ 26 ][ 1 ] = " "; table[ 0 ][ 2 ] = "._ "; table[ 1 ][ 2 ] = "_... "; table[ 2 ][ 2 ] = "_._. "; table[ 3 ][ 2 ] = "_.. "; table[ 4 ][ 2 ] = ". "; table[ 5 ][ 2 ] = ".._. "; table[ 6 ][ 2 ] = "__. "; table[ 7 ][ 2 ] = ".... "; table[ 8 ][ 2 ] = ".. "; table[ 9 ][ 2 ] = ".___ "; table[ 10 ][ 2 ] = "_._ "; table[ 11 ][ 2 ] = "._.. "; table[ 12 ][ 2 ] = "__ "; table[ 13 ][ 2 ] = "_. "; table[ 14 ][ 2 ] = "___ "; table[ 15 ][ 2 ] = ".__. "; table[ 16 ][ 2 ] = "__._ "; table[ 17 ][ 2 ] = "._. "; table[ 18 ][ 2 ] = "... "; table[ 19 ][ 2 ] = "_ "; table[ 20 ][ 2 ] = ".._ "; table[ 21 ][ 2 ] = "..._ "; table[ 22 ][ 2 ] = ".__ "; table[ 23 ][ 2 ] = "_.._ "; table[ 24 ][ 2 ] = "_.__ "; table[ 25 ][ 2 ] = "__.. "; table[ 26 ][ 2 ] = " "; return; }
int main() { int index = 27; std::string table[ index ][ 2 ]; database( table ); return 0; }
Po kompilacji program po prostu się zwiesza, i wyskakuje Windowsowy raport o błędzie. Udało mi się namierzyć Z CZYM jest nie tak: jeżeli usunę 2 ostatnie linii z każdego wymiaru tabeli (table[26][1] oraz table[26][2]) to wszystko działa. Moje pytanie brzmi więc nie CO? tylko DLACZEGO? |
|
pekfos |
» 2013-07-05 20:27:15 Tablice indeksuje się od zera. |
|
V0ldek Temat założony przez niniejszego użytkownika |
» 2013-07-05 20:32:12 Nie ma to jak spędzić pół dnia nad kawałkiem kodu i nie zauważyć podstawowego błędu początkującego programisty ;D
Ale jeżeli mógłbyś mi wytłumaczyć, to dlaczego do table[25] wszystko działa, a DOPIERO POTEM się sypie? |
|
akwes |
» 2013-07-05 20:33:26 Widocznie dopiero tamtymi elementami nadpisujesz jakąś szalenie ważną cześć pamięci. Nie każde niepoprawne nadpisanie pamięci musi być zauważalne (co jest jeszcze gorsze!). |
|
V0ldek Temat założony przez niniejszego użytkownika |
» 2013-07-05 20:35:43 To dużo wyjaśnia. W takim razie dzięki za pomoc. Jestem załamany swoją spostrzegawczością. Zamykam. |
|
« 1 » |