Zwalnianie pamieci w pascalu HELP!

0

Witam!

mam sobie tablice z przedzialem [0..N], N mam jako stala wartosc rowna dla przykladu 20. Wczytuje 10 liczb z pliku do tej tablicy i tu pojawia sie moje pytanie, mianowicie jak zrobic, zeby zwolnic niepotrzebna pamiec, czyli zeby n nie bylo juz 20 tylko rownalo sie ilosci wczytanych liczb z pliku.

Bardzo z gory dziekuje za pomoc!!!

-pozdrawiam, Michal

0

musiałbyś zastąpić tą tablicę czymś, co pozwala na kontrolowanie ilości elementów, np. listą. W pascalu nie ma tablic dynamicznych i na dobrą sprawę musiał byś napisać własną implementację, zobacz też http://pascal.sources.ru/memory/dynarr10.htm

0

{$r-}
{czemu wylaczane range checking to dalej}
const N=100; {ta liczba nie ma zadnego znaczenia}
type
typpodstawowy=integer;
tablica=array[1..N]of typpodstawowy;
ptablica=^tablica;

function alloc(var t:ptablica;ileelemantow:int):boolean;
begin
  alloc:=false;
  if maxavail<ileelementow*sizeof(typpodstawowy) then exit;
  {zwracamy false jesli brak pamieci}
  getmem(t,ileelementow*sizeof(typpodstawowy));
  alloc:=true;
end;

procedure free(var t:ptablica;ileelemantow:int);
begin
  freemem(t,ileelementow*sizeof(typpodstawowy));
  {to nie wymaga komentarza}
  t:=nil;
end;

function realloc(var t:ptablica;starailosc,nowailosc:int):boolean;
var
  u:ptablica;
  i:integer;
begin
  realloc:=false;
  if not alloc(u,nowailosc)then exit;
  realloc:=true;
  {do tej pory juz znasz}
  i:=nowailosc;
  if starailosc<nowailosc then i:=starailosc;
  {przesuniemy minimum z dwoch : rozmiar nowej i ilosc w starym}
  move(t^,u^,i*sizeof(typpodstawowy));
  free(t,starailosc);
  t:=u;
  {wartosc przekazujemy przez referencje - t}
end;

w pascalu trzeba pamietac o ilosci przydzielonej pamieci. freemem nie dziala z automatu</delphi>

a czemu wylaczone sprawdzanie zakresu ? zeby moc deklarowac, i uzywac tablic wiekszych niz zadeklarowane N
wlasciwie to N mozna zadeklarowac jako :

const N=65534 div sizeof(typpodstawowy);

i wtedy nie musisz wylaczac r.

1 użytkowników online, w tym zalogowanych: 0, gości: 1