dinamikus array[][]

Fórumok

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ások

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$%#$#%^*^"

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

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.