eli miten saisi varattua kaksiulotteiselle taulukolle muistia
vähän samaan tapaan kuin malloc:illa
Käyttämällä ReDim-komentoa. Ohjeet löytyvät helpistä.
sqwiik kirjoitti:
Käyttämällä ReDim-komentoa.
Mitenkä minusta tuntuu että se on QB/VB:n komento? :)
Se on ;) taitanee samlui tarkoittaa NEW komentoa.
Hups... Pitänee katsoa vähän tarkemmin ensi kerralla. Mutta siltikin on vaikea saada C/C++ näyttämään Basic-sanalta. Haettu komento on todellakin new.
Ihan samalla mallocilla sekin onnistuu. Ja C:stä ei löydy new:tä, jos nyt haluaa ilman ++:aa koodata.
int Rivimaara; int RivinPituus; int ** Taulu; Taulu = malloc(Rivimaara * sizeof(int *)); // Varataan koko taulukko 1. alkioon Taulu[0] = malloc(RivinPituus * Rivimaara * sizeof(int)); // Laitetaan loput rivit kohdalleen for (R = 1; R < Rivimaara; R++) Taulu[R] = &Taulu[0][R * RivinPituus];
Tuossa on se hauska puoli, että jos yrität lukea liian pitkältä, niin päädyt seuraavalle riville (niin se saattaa muutenkin joskus olla, mutta sitä ei ole taattu).
Lisäksi se on helposti vapautettu:
free(Taulu[0]); free(Taulu);
miten tämä new tarkalleen ottaen toimii? Yritin seuraavalla tavalla muttei toiminut
int **taulu; taulu = new int[10][10];
Taitaisi olla näin:
int **taulu; taulu = new int *[10]; for (X = 0; X < 10; X++) taulu[X] = new int[10];
Ja vastaavasti tuhoaminen for-loopissa:
for (X = 0; X < 10; X++) delete [] taulu[X]; delete [] taulu;
Tai sitten näin:
#define LEVEYS 10 #define KORKEUS 10 int *pTaulu = new int[LEVEYS * KORKEUS]; // Tiettyyn alkioon (x, y) voi viitata näin: pTaulu[x*LEVEYS + y] = 42; // Ja lopuksi siitä pääsee helposti eroon delete pTaulu; pTaulu = 0;
Muista, että on varattu taulu eikä yksittäinen int.
delete [] pTaulu;
Aihe on jo aika vanha, joten et voi enää vastata siihen.