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

[C] Dynamiczna alokacja tablicy tablic 2-elementowych

Ostatnio zmodyfikowano 2012-03-31 18:10
Autor Wiadomość
e_marcin
Temat założony przez niniejszego użytkownika
[C] Dynamiczna alokacja tablicy tablic 2-elementowych
» 2012-03-31 13:36:07
Witam
Potrzebuje tablicy 2-wymiarowej, której pierwszy wymiar nie jest "z góry" znany a drugi tak.
Czyli coś w stylu
C/C++
int tab[ 9 ][ 2 ];
gdzie 9 się zmienia.

Potrafię przekazać taką tablice do funkcji
C/C++
void funkcja( int( * tab )[ 2 ] );
ale nie potrafię dynamicznie zaalokować pamięci (nie wiem w jakiej postaci ma być wskaźnik itd.)

Czy ktoś, kto potrafi to zrobić mógłby napisać jakiś działający przykład.
P-53582
DejaVu
» 2012-03-31 14:03:28
P-53584
e_marcin
Temat założony przez niniejszego użytkownika
» 2012-03-31 14:16:07
Chodzi o język C i konkretnie o funkcję malloc().

Tak wygląda pełna alokacja:
C/C++
int ** tab =( int ** ) malloc( X * sizeof( int * ) );
for( i = 0; i < X; i++ )
     tab[ i ] =( int * ) malloc( 2 * sizeof( int ) );
No i zamiast linii z drugim malloc'iem musze tam wstawić coś innego, ale nie wiem jak. POMOCY
P-53587
DejaVu
» 2012-03-31 15:07:43
Jak nie wiesz co masz wstawić to jak chcesz to napisać? :)
» standard Cmalloc
P-53594
e_marcin
Temat założony przez niniejszego użytkownika
» 2012-03-31 15:15:38
Eee...chyba logiczne, że jakbym wiedział jak to napisać to bym nie prosił o pomoc.

Linia, której nie umiem napisać dokładnie powinna wyglądać tak:
C/C++
int( * tab )[ 2 ] =( RZUTOWANIE ) malloc( 9 * sizeof( ROZMIAR ) );
Nie wiem co wpisać w miejsce RZUTOWANIE i ROZMIAR.
P-53595
DejaVu
» 2012-03-31 16:27:52
...
C/C++
( int * ) malloc( 9 * sizeof( int ) );
P-53598
e_marcin
Temat założony przez niniejszego użytkownika
» 2012-03-31 16:51:54
A nie powinno być:
int( * tab )[ 2 ] =( int ** ) malloc( 9 * sizeof( int * ) );

No bo przecież tab to tablica wskaźników, więc powinna być typu int** i przyjmować wartości int *.

Tylko problem w tym, że i jeden i drugi sposób kompiluje się z warning'iem:
warning: initialization from incompatible pointer type
P-53600
e_marcin
Temat założony przez niniejszego użytkownika
» 2012-03-31 18:10:34
Próbowałem rozwiązać ten problem na tysiąc sposobów i znalazłem tylko jeden....

...zamiast takiej tablicy użyłem tablicy struktur z dwoma polami int. Alokacja działa bez problemu a i sortowanie(które muszę później wykonać) jest 100 razy łatwiejsze i szybsze do napisania.

Jeżeli ktoś znajdzie rozwiązanie problemu z tą tablicą to niech się pochwali.
Pozdro
P-53605
« 1 »
  Strona 1 z 1