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