Segfault on simple struct manipulation

Kirk McDonald kirklin.mcdonald at gmail.com
Mon Aug 14 18:24:54 PDT 2006


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.

-- 
Kirk McDonald
Pyd: Wrapping Python with D
http://pyd.dsource.org



More information about the Digitalmars-d mailing list