[fpc-pascal] dynamic array contents and system.move
fpc at mfriebe.de
Sat Apr 24 23:17:55 CEST 2010
On 24/04/2010 22:01, Andrew Brunner wrote:
> 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<dle3ab at 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, self.f_data, length(self.f_data) * sizeof(byte));
No he doesn't get leaks. If at all he would get crashes, by overwriting
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.
More information about the fpc-pascal