On 24/04/2010 22:01, Andrew Brunner wrote:
David,

I don't see how you are not getting memory leaks by doing a move
before making sure that the destination buffer has the memory
allocated.  You see, in Delphi and FPC, move d/n actually move the
memory... It just copies it.

You were warned :-)

On Sat, Apr 24, 2010 at 3:01 PM, David Emerson<dle...@angelbase.com>  wrote:
cobines wrote:
David Emerson wrote:
move (src.f_data, self.f_data, length(self.f_data) * sizeof(byte));
I think it should be:

SetLength(self.f_data, length(src.f_data));
move (src.f_data[0], self.f_data[0], length(self.f_data) * sizeof(byte));
No he doesn't get leaks. If at all he would get crashes, by overwriting random memory.

But in this case, it's (almost !) save.
He uses " length(self.f_data)* sizeof(byte)" => so he never copies, more bytes to the target than the target can hold.

He may however copy bytes from behind the source, reading random memory behind the source. He does not modify this random memory, so far so good => as long as the random meory behind the source is accesible to his process. If it's not accessible, then access violation.

Martin
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to