digitalmars.D - Segfault on simple struct manipulation
- Peter Thomassen (23/23) Aug 14 2006 Hi there,
- Kirk McDonald (14/44) Aug 14 2006 In your code. :-) Structs are a value type. Your main() should look like...
- BCS (8/53) Aug 15 2006 If you want to use a pointer-to-List, assign something to it.
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 tux ~/D $ dmd bitsort.d gcc bitsort.o -o bitsort -m32 -lphobos -lpthread -lm peter tux ~/D $ ./bitsort This is shown. Segmentation fault (core dumped) peter tux ~/D $ Is this a bug? Peter
Aug 14 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 tux ~/D $ dmd bitsort.d gcc bitsort.o -o bitsort -m32 -lphobos -lpthread -lm peter tux ~/D $ ./bitsort This is shown. Segmentation fault (core dumped) peter tux ~/D $ Is this a bug? PeterIn 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
Aug 14 2006
Kirk McDonald wrote:Peter Thomassen wrote: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; }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 tux ~/D $ dmd bitsort.d gcc bitsort.o -o bitsort -m32 -lphobos -lpthread -lm peter tux ~/D $ ./bitsort This is shown. Segmentation fault (core dumped) peter tux ~/D $ Is this a bug? PeterIn 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.
Aug 15 2006