procedura dynamicznego zajmowania pamięci

0

witam
mam pewien problem...piszę projekt i postanowiłem go napisać w Delphi, ale jak to bywa u początkującego programisty utknąłem w pewnym miejscu...wobec tego moja prośba do szanownych forumowiczów - czy ktoś moze mógłby mi przepisać pewną procedurę z C/C++ na Delphi ? otote procedurki

#define OFFSET 1

/*---------------------------------------------------------------------------*/
/*      ALLOCATE MEMORY FOR VECTOR                                           */
/*---------------------------------------------------------------------------*/

double *mallocVect(long n0, long nx)
{
        double *vect;
 
        vect=(double *)malloc((size_t) ((nx-n0+1+OFFSET)*sizeof(double)));
        if (!vect){
	  printf("Memory allocation failure in mallocVect");
	}
        return vect-n0+OFFSET;
}

/*---------------------------------------------------------------------------*/
/*      FREE MEMORY FOR MALLOCVECT                                           */
/*---------------------------------------------------------------------------*/
 
void freeVect(double *vect, long n0, long nx)
{
        free((ARG1) (vect+n0-OFFSET));
}

przykładowe ich wywołanie wygląda następująco w programie oryginalnym na którym się opieram:

   w = mallocVect(1,n);
   Hw = mallocVect(1,n);

z góry serdecznie dziękuję za pomoc i serdecznie pozdrawiam
malcziki

0

Będzie to coś takiego:

const OFFSET=1;

function mallocVect(n0:longint; nx:longint):pdouble;
begin
try
  GetMem(result, (nx-n0+1+OFFSET)*sizeof(double));
  result:=pdouble(integer(result)+(-n0+OFFSET)*sizeof(double));
except
  raise Exception.Create('Memory allocation failure in mallocVect');
  end;
end;

procedure freeVect(vect:pdouble; n0:longint; nx:longint);
begin
vect:=pdouble(integer(vect)-(-n0+OFFSET)*sizeof(double));
FreeMem(vect, (nx-n0+1+OFFSET)*sizeof(double));
end;
0

witam
na początek dziękuje za zainteresowanie i pomoc...ale teraz stanąłem przed kolejnym problemem: otóż gdy próbuje wykorzystać funkcje podane przez poprzednika w poniższy sposób:

procedure TForm1.Button1Click(Sender: TObject);
var wsk: pdouble;
begin
  wsk:=mallocVect(1,5);
  wsk[1]:=1;
  wsk[5]:=5;
  freeVect(wsk,1,5)
end;

otrzymuje następujący błąd:
Array type required
a kursor ustawia się na linii wsk[1]:=1;
czy mógłbym poprosić jeszcze o wyjaśnienie tego co robię źle w moim odwołaniu do zmiennej utworzonej przez funkcję mallocVect, ewentualnie o podpowiedź jak prawidłowo utworzyć i odwołać się do pożądanej przeze mnie zmiennej...z góry dziękuję za wszelką okazaną pomoc i pozdrawiam
malcziki

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