dlang bug - accessing module variable from method segfaults only when using module reference directly

Chris Katko ckatko at gmail.com
Fri Jul 1 13:28:26 UTC 2022


On Friday, 1 July 2022 at 13:12:05 UTC, Adam D Ruppe wrote:
> On Friday, 1 July 2022 at 12:57:01 UTC, Chris Katko wrote:
>> Cannot access memory at address 0x10
>
> Looks like an ordinary null pointer. How did you create the 
> variable?


````D
bool initialize() //called from main
	{
	g.world = new world_t;
	}

class atlasHandler{}
class animation
	{
	this(int _numFrames, ipair[] coordinates, atlasHandler atlas)
		{
		}
	}

class world_t
	{	
	atlasHandler atlas;

	this()
		{
		viewTest();
		atlas = new atlasHandler();

		units ~= new elf(pair(200, 200), atlas); //crashes
		}
	logic()
		{
		// doesn't crash
		units ~= new elf(pair(200, 200), atlas);
		}

	}

class elf : unit
	{
	this(pair _pos, atlasHandler atlas)
		{		
		super(0, _pos, pair(0, 0), g.dude_bmp);
//		anim = new animation(1, elf_coords, atlas); //doesn't crash
		anim = new animation(1, elf_coords, g.world.atlas); //CRASH here
		isTreeWalker = true;
		}
	}

````


also important. it seems to only occur in the constructor. If I 
create an elf after the world constructor, it's fine.

...wait, does "world" not 'exist' until after the constructor 
finishes? Is that's what's going on? But then why does it 'exist' 
when I send it directly? Is it only "registered" with the module 
once this() finishes or something like that?


More information about the Digitalmars-d-learn mailing list