previous next Up Title Contents Index

16.2.4 realloc, c

Funktioilla malloc tai calloc varattua muistitilaa voidaan tarvittaessa muuttaa realloc - funktiolla. Funktiolle viedään parametrina muistitilan osoite ja haluttu uusi koko. Käytännössä realloc voi toimia siten, että se ensin varaa kokonaan uuden muistitilan ja tämän jälkeen kopioi vanhan muistitilan vastaavan osan (kaikki tai osan jos pienennetään) uuteen paikkaan. Funktio palauttaa uuden paikan osoitteen tai NULL, mikäli koon muuttaminen ei onnistu.

Jäsenen lisäyksessä voisimme tehdä myös seuraavasti, eli kasvatettaisiin jäsenistön kokoa 50%, mikäli jäsenistö tulee täyteen (cKerho jaettiin kahteen osaan: cKerho ja cJasenet):

talletus.2\jasenet.cpp - taulukon koon kasvattaminen

	//----------------------------------------------------------------------------
	const char *cJasenet::kasvata_kokoa()
	/*
	** Yritetään allokoida uutta tilaa 50% maksimimäärään nähden lisää.
	** Paitsi jos vanha koko on 1, niin kasvatetaan 2:ksi.
	** Jos vanha tila on 0, niin tehdään uusi tila.
	----------------------------------------------------------------------------*/
	{
	  if ( max_lkm <= 0 ) return luo_taulukko(2);
	  int uusi_koko = 3*(max_lkm)/2; if ( uusi_koko <= 1 ) uusi_koko=2;
	
	  cJasen **uusi_tila = (cJasen **)realloc(alkiot,uusi_koko*sizeof(cJasen *));
	
	  if ( uusi_tila == NULL ) return LIIKAA_ALKIOITA;
	  alkiot = uusi_tila;
	  max_lkm = uusi_koko;
	  return NULL;
	}
	...
	  if ( jasenia >= max_jasenia ) virhe = kasvata_kokoa();
	  if ( virhe ) return virhe;


previous next Up Title Contents Index