[fpc-devel] sub byte arrays

Jonas Maebe jonas.maebe at elis.ugent.be
Tue Jul 20 12:28:46 CEST 2010


On 20 Jul 2010, at 12:03, theo wrote:

> Now I was trying if something like this would work:
> 
> TTest=(one,two,three,four);
> TTestarray = {bitpacked} array [1..100000] of ttest;
> PTestarray = ^TTestarray;  
> 
> var lMask: PTestarray;
> begin
> getmem(lMask, 25);

Uses new(lMask) instead, then the compiler will automatically allocate the right size for you.

> lMask^[99]:=three;
> case lMask^[99] of
>  one:writeln('one');
>  two:writeln('two');
>  three:writeln('three');
>  four:writeln('four');
> end;
> freemem(lMask);
> end;             
> 
> 
> It seems, to work, but it even works with commented "bitpacked".
> Shouldn't this fail?

You are writing into unallocated memory. The result of such an operation is "undefined". That means that it can to work, can crash, or anything in between.

> How can I test this? I have all checks on which
> Lazarus IDE offers, but it's still happy.

Have you enabled heaptrc? (-gh)


Jonas


More information about the fpc-devel mailing list