Looks like dereferencing a null pointer, but is ok???

Sean Kelly sean at f4.ca
Mon Sep 11 16:41:52 PDT 2006


Regan Heath wrote:
> On Mon, 11 Sep 2006 14:12:20 -0700, Sean Kelly <sean at f4.ca> wrote:
>> Georg Wrede wrote:
>>> In an old message,
>>>
>>>>> I don't think that any extra overhead is involved in slicing. D 
>>>>> doesn't even check if a pointer is valid.
>>>>> (That might be a gotcha come to think of it)
>>>>>
>>>>> void main()
>>>>> {
>>>>>     char[] foo = (cast(char*)null)[0..10];
>>>>> }
>>>>
>>>> Great example! I am now convinced there is nothing
>>>>> to worry about. Thanks everyone for the help!
>>>  I'm baffled.
>>>  I would have expected this to cause an error!
>>>  And if really not, what in the world is
>>>     (cast(char*)null)[0..10]
>>>  supposed to mean, or return???
>>
>> Who knows what it means--it should cause an access violation at run time.
> 
> Why? I mean null is the memory address 0x0 and slicing simply assigns a 
> string to the values given, eg.
> 
> //assuming
> struct string {
>   void* data;
>   int length;
> }
> 
> //we get
> string a;
> a.data = null;
> a.length = 10;

Oh true.  I forgot that the slice syntax doesn't actually dereference 
the memory if the slice occurs on an rvalue.  So I suppose it would be 
okay.  But you obviously couldn't do anything with the slice.


Sean



More information about the Digitalmars-d-learn mailing list