dinamikus array[][]

 ( bitumen | 2008. március 16., vasárnap - 13:13 )

Sziasztok!

dinamikusan szeretnék 2 dimenziós tömböt foglalni a memóriában. Így próbáltam:

int ***array;
array=malloc(sizeof(int[5][5]));
*array[2][2]=123;

Elszegfaultol. Azért használok ***-t, mert a malloc ugye pointert ad vissza (1 csillag), a 2 dimenziós tömb meg pointerpointer, tehát még 2 csillag.
Mi a baj? Hogyan tudom működésre bírni?
Előre köszi.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

int (*array)[5];

array = (int(*)[5])malloc(sizeof(int[5][5]));
array[2][2] = 123;

szerk: ebben (http://www.libri.hu/hu/book/computer_informatika/programozas/programozzunk_c_nyelven_1) van egy jó fejezet a C kifejezésekről

int **tomb, i;

tomb=(int**)malloc(sizeof(int*)*10);

for(i=0; i<10; i++)
tomb[i]=(int*)malloc(sizeof(int)*10);

Igy van egy 10x10-es tombod.

_________________________________________________________________________
"ONE OF THESE DAYS I'M GOING TO CUT YOU INTO LITTLE PIECES!!!$E$%#$#%^*^"

Jah, a jóöreg favágómódszerek. Ezen már a '70-es években is röhögtek volna...

---
http://xkcd.com/258/

Apple MacBook
CD 1.83 | 1.25GB 667MHz | 60GB SATA | 2.36 kg | 5400mAh @ 12.5V

Akkor hogy kellett volna C-ben?

_________________________________________________________________________
"ONE OF THESE DAYS I'M GOING TO CUT YOU INTO LITTLE PIECES!!!$E$%#$#%^*^"

int **tomb = ( int ** )malloc( 5 * sizeof( int* ) );
int i;

for( i = 0; i < 5; i++ )
tomb[i] = ( int * )malloc( 5 * sizeof( int ) );

// 5x5 int tomb-nek hely lefoglalva

MacBook C2D 2.2Ghz 2x1G Intel X3100

Lol. :^D

_________________________________________________________________________
"ONE OF THESE DAYS I'M GOING TO CUT YOU INTO LITTLE PIECES!!!$E$%#$#%^*^"

+1

tensor.[ch]

Ezzel:

int **array;
array=tensor_alloc_2d(int,sx,sy);
array[0...sy-1][0...sx-1]=...;

Ez egy altalanos ize, ami tetszoleges rendu" tombot le tud foglalni, (azaz nemcsak 2d-set hanem elvileg barmennyit) es egy db malloc()-ra visszavezeti, tehat free()-vel ugyanugy felszabadithato. Amire figyelni kell, hogy az egyes dimenziokban a me'reteket forditott sorrendben kell megadni, mintahogy a cimzesnel/ertekadasnal a [...]-ben. Szerk: egy kis szepseghibaja van a dolognak, hogy size_t helyett sok helyen int-et ke'r. De halistennek 4giganal nagyobb cuccok ilymodon nem volt szukseg. Majd javitom.

int *A;
int a=5;
int b=5;

A=(int*) malloc(a*b*sizeof(int));
int x=2;
int y=2;
A[a*x+y]=123

sorfolytonosan.

köszönöm a válaszokat!