On Saturday, June 06, 2015 09:44:36 Tim K. via Digitalmars-d-learn wrote: > Hello! > > I just started learning D and I come from a mostly C and C# > background. > Hello World was working, so I figured that I should try something > more complex: a template class and si I went with a simple stack. > > Using dmd the code I wrote causes a segmentation fault and I am > not sure why. > > import std.stdio; > import std.container.slist; > > > class Stack(T) > { > SList!(T) s; > this() {} > void push(T element) > { > s.insertFront(element); > } > } > > int main() > { > Stack!(int) x; > writeln("1"); > SList!(int) p; > writeln("2"); > p.insertFront(42); > writeln("3"); > x.push(42); > writeln("4"); > return 0; > } > > > This program prints the following into the console: > % dmd test.d && ./test > 1 > 2 > 3 > zsh: segmentation fault ./test > > > I do not understand why the normal SList works fine but the one > inside the object doesn't. What am I overlooking?
>From the looks of it, you never initialized x, so it's null. So, the problem has nothing to do with SList. It's the fact that you're trying to dereference a null reference. You need to call new to allocate a Stack!int, not just declare a reference to one. void main() { Stack!int x x.push(42); } would have exactly the same problem. You need something like auto x = new Stack!int; - Jonathan M Davis