Segfault on simple struct manipulation

BCS BCS at pathlink.com
Tue Aug 15 08:41:05 PDT 2006


Kirk McDonald wrote:
> Peter Thomassen wrote:
> 
>> Hi there,
>>
>> I'm coming from PHP and am very new to compiled languages, so maybe I'm
>> completely wrong.
>>
>> I have the following bitsort.d:
>>
>> import std.stdio;
>> struct List {
>>         uint value;
>> }
>> void main() {
>>         List* list;
>>         writefln("This is shown.");
>>         list.value = 5;
>>         writefln("This is not shown.");
>> }
>>
>> And this happens:
>>
>> peter at tux ~/D $ dmd bitsort.d
>> gcc bitsort.o -o bitsort -m32 -lphobos -lpthread -lm
>> peter at tux ~/D $ ./bitsort
>> This is shown.
>> Segmentation fault (core dumped)
>> peter at tux ~/D $
>>
>> Is this a bug?
>> Peter
> 
> 
> In your code. :-) Structs are a value type. Your main() should look like 
> this:
> 
> void main() {
>     List list;
>     list.value = 5;
> }
> 
> By saying "List* list;" you are declaring a pointer to a list, which is 
> initialized to null. When you then say "list.value", you're 
> dereferencing a null pointer, which causes the segfault.
> 


If you want to use a pointer-to-List, assign something to it.

void main() {
     List back;
     List* list = new List;

     //or      List* list = &back;

     list.value = 5;
}




More information about the Digitalmars-d mailing list