manual memory management

deadalnix deadalnix at gmail.com
Wed Jan 9 17:14:29 PST 2013


On Thursday, 10 January 2013 at 01:10:06 UTC, H. S. Teoh wrote:
> On Thu, Jan 10, 2013 at 01:50:28AM +0100, Adam D. Ruppe wrote:
>> On Thursday, 10 January 2013 at 00:18:26 UTC, Walter Bright 
>> wrote:
>> >And that is not dereferencing null, it is dereferencing 
>> >0x1000000.
>> 
>> Yes, but it is worth noting that dmd will happily compile that 
>> code,
>> even if marked @safe - just because the pointer on the language
>> level is null doesn't mean it is memory safe at the assembly 
>> level.
>> 
>> the generated code with @safe is still just what we'd expect 
>> too:
>>    3:   31 c0                   xor    eax,eax
>>    5:   c7 80 00 00 10 00 0a    mov    DWORD PTR 
>> [eax+0x100000],0xa
>
> Yeah that's exactly what I was thinking too. To DMD, it's a 
> null pointer
> dereference. But actually, it's dereferencing something else, 
> because
> x.fieldName is, in general, *not* null when x is null.
>
> Hmm. This looks like another hole in SafeD? Unless null pointer 
> checks
> are inserted. (The checks have to be made on x, not 
> x.fieldName, of
> course.)
>

That is exactly why my NPE proposal do trigger on other address 
that 0. Still, it require to add check for big objects (or high 
indices in arrays).


More information about the Digitalmars-d mailing list