[fpc-devel] porting from fpc to tp7

Daniël Mantione daniel.mantione at freepascal.org
Sat Mar 24 11:35:24 CET 2007



Op Sat, 24 Mar 2007, schreef Evgeniy Ivanov:

> On Sat, 24 Mar 2007 13:05:54 +0300, Dani=EBl Mantione
> <daniel.mantione at freepascal.org> wrote:
> =

> =

> > > procedure add_mem(var P: dynamic_array_ptr; var cur_size:Integer);
> > > var
> > > i:Integer;
> > > buff_ptr:dynamic_array_ptr;
> > > begin
> > > getmem(buff_ptr,cur_size*sizeof(BusStation) );
> > > for i:=3D1 to cur_size do
> > > buff_ptr^[i] :=3D P^[i];
> > > freemem(P);
> > > cur_size:=3Dcur_size+buf_count;
> > > getmem(P,cur_size*sizeof(BusStation) );
> > > for i:=3D1 to (cur_size-buf_count) do
> > > P^[i] :=3D buff_ptr^[i];
> > > freemem(buff_ptr);
> > > cur_size:=3Dcur_size+buf_count;
> > > end;
> =

> > =

> > Why do you increase cur_size two times? At the end of the procedure
> > cur_size is larger than the buffer is.

> Ou, surely. But it is new bug. When I used tp there was'n second increase.
> Also buf_count value is 10 and I have tried to add only 5 elements. After
> second startup the problems have begun.

Well, all I can say is check your code securely. The basic idea is good, =

so it is likely the implementation.
 =

> > Further, you want to use move instead of a for loop, since in TP the
> > speed difference is even larger than in FP.
> =

> Sorry, but I didn't understand what you ment exactly. You ment to use ptr=
_buf
> =3D P and then getmem(P) and for loop?

Instead of:

for i:=3D1 to cur_size do
  buff_ptr^[i] :=3D P^[i];

... do:

move(p^[1],buff_ptr^[1],(cur_size-1)*sizeof(p^);

Also, is your array really 1-based?

Dani=EBl


More information about the fpc-devel mailing list