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.
- 1851 megtekintés
Hozzászólások
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/programozz…) van egy jó fejezet a C kifejezésekről
- A hozzászóláshoz be kell jelentkezni
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$%#$#%^*^"
- A hozzászóláshoz be kell jelentkezni
Jah, a jóöreg favágómódszerek. Ezen már a '70-es években is röhögtek volna...
Apple MacBook
CD 1.83 | 1.25GB 667MHz | 60GB SATA | 2.36 kg | 5400mAh @ 12.5V
- A hozzászóláshoz be kell jelentkezni
Akkor hogy kellett volna C-ben?
_________________________________________________________________________
"ONE OF THESE DAYS I'M GOING TO CUT YOU INTO LITTLE PIECES!!!$E$%#$#%^*^"
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
Lol. :^D
_________________________________________________________________________
"ONE OF THESE DAYS I'M GOING TO CUT YOU INTO LITTLE PIECES!!!$E$%#$#%^*^"
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
köszönöm a válaszokat!
- A hozzászóláshoz be kell jelentkezni