On 12/08/2013 07:24 PM, Adam D. Ruppe wrote:
Easy problem in class B: data is null!

On Monday, 9 December 2013 at 02:53:01 UTC, Heinz wrote:
class B
{
    private const ubyte* data;
    private ubyte[] abc;

    this()
    {
        data = cast(const ubyte*)abc.ptr;
    }


Since abc isn't initialized in this constructor, abc.ptr is null. So
data is null too.


    public void print()
    {
        for(size_t i = 0; i < 4; i++)
        {
            writefln("%d", data[i]);
        }
    }
}


And since data is null, data[i] will be a memory err/segfault/access
violation/whatever it is called.

Apparently the OP intended to set it in foo(). If the data is actually mutable and there really is no way other than going against the type system, foo() must be called at least once and can be implemented like this:

    public void foo()
    {
        abc = [1,2,3,4];
        cast(ubyte*)data = abc.ptr;
    }

// ...

    B b = new B();
    b.foo();
    b.print(); // now OK

Ali

Reply via email to