Dynamiczne alokowanie tablicy dwuwymiarowej - problem z odniesieniem się do jej elementu
Ostatnio zmodyfikowano 2017-03-02 15:08
latajacaryba Temat założony przez niniejszego użytkownika |
Dynamiczne alokowanie tablicy dwuwymiarowej - problem z odniesieniem się do jej elementu » 2017-03-02 00:59:51 Witam, mam błahy problem, choć jednak sam nie moge go zlokalizowac. Pierwszy raz dynamicznie alokuje tablicę dwuwymiarową i jest pewien problem, na początek kod:
Mapa( int xx = 25 ) { x = szer / xx; y = wys / xx; wsk = new bool *[ y ]; for( int i = 0; i < x; i++ ) { wsk[ i ] = new bool[ x ]; wsk[ i ] = false; } }
Na pewnej stronie wyczytałem, że tak ma wyglądać taka alokacja, tylko kiedy odwołam się nawet do elementu zerowego wsk[0][0] w main - błąd krytyczny. Pewnie odnoszę się do nieistniejącego elementu, ale co tu jest źle - nie wiem. PS wydaje mi sie ze odpowiada za to alokowanie w funkcji (konstruktorze) i trzeba to zrobic na liscie inicjalizacyjnej. Tylko jak, skoro jest tam petla? |
|
mateczek |
» 2017-03-02 05:59:10
for( int k = 0; k < x; k++ ) { wsk[ i ][ k ] = false; }
|
|
pekfos |
» 2017-03-02 07:56:32 wsk = new bool *[ y ]; for( int i = 0; i < x; i++ ) { wsk[ i ] = new bool[ x ]; |
Zaalokowałeś y wskaźników, a przypisujesz x wartości. |
|
Monika90 |
» 2017-03-02 09:56:38 Przypisanie bool do wskaźnika, tego nie da się skompilować. Dlaczego nie alokujesz w jednym kawałku? new bool[ wys * szer ] { };
|
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2017-03-02 14:42:02 @Pekfos Racja, niedopatrzenie, dzieki :)
@Mateczek / Monika90 code blocks nie wyrzuca błędu, a kiedyś widziałem gdzieś taki zapis więc wydawało mi się, że jest dobrze, poprawie to.
@Monika90 Potrzebna mi jest dwuwymiarowa, łatwiej będzie mi się nią posługiwać :) Będę jej używał do tworzenia mapy kafelkowej ( true == droga, false == trawa ) oczywiście 2D dlatego jest mi potrzebna takowa tablica.
Temat zamykam:) |
|
mateczek |
» 2017-03-02 15:08:34 Potrzebna mi jest dwuwymiarowa, łatwiej będzie |
można małym kosztem napisać klasę, która symuluje tablice 2D. raczej o czymś takim wspomniała monika90. Alokujesz pamięć dla tablicy 1D a interface dopisujesz jak dla 2D #include<iostream> using namespace std; class matrix { int * tab = nullptr; int wiersze = 0, kolumny = 0; public: matrix( int w, int k ) : wiersze( w ) , kolumny( k ) { int rozmiar = w * k; tab = new int[ rozmiar ]; } matrix() { } ~matrix() { if( tab ) { delete[] tab; tab = nullptr; } } int & operator ()( int w, int k ) { return tab[( w ) * kolumny + k ]; } int row() { return wiersze; } int column() { return kolumny; } };
int main() { matrix tablica2d( 3, 3 ); int i = 0; for( int w = 0; w < tablica2d.row(); w++ ) { for( int k = 0; k < tablica2d.column(); k++ ) { tablica2d( w, k ) = i++; } } for( int w = 0; w < tablica2d.row(); w++ ) { for( int k = 0; k < tablica2d.column(); k++ ) { cout << tablica2d( w, k ) << " "; } cout << endl; } }
|
|
« 1 » |