Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Kaksiulotteisen taulukon muistin varaaminen

Sivun loppuun

samlui [04.03.2005 21:05:29]

#

eli miten saisi varattua kaksiulotteiselle taulukolle muistia
vähän samaan tapaan kuin malloc:illa

sqwiik [04.03.2005 21:17:32]

#

Käyttämällä ReDim-komentoa. Ohjeet löytyvät helpistä.

rndprogy [04.03.2005 21:29:56]

#

sqwiik kirjoitti:

Käyttämällä ReDim-komentoa.

Mitenkä minusta tuntuu että se on QB/VB:n komento? :)

ZcMander [04.03.2005 21:31:27]

#

Se on ;) taitanee samlui tarkoittaa NEW komentoa.

sqwiik [04.03.2005 21:33:23]

#

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.

Metabolix [04.03.2005 21:43:35]

#

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);

samlui [06.03.2005 16:18:16]

#

miten tämä new tarkalleen ottaen toimii? Yritin seuraavalla tavalla muttei toiminut

int **taulu;
taulu = new int[10][10];

Metabolix [06.03.2005 16:51:55]

#

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;

kooderi [12.03.2005 12:50:00]

#

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;

Metabolix [12.03.2005 16:31:45]

#

Muista, että on varattu taulu eikä yksittäinen int.

delete [] pTaulu;

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta