Pointer problems, changing for no reasons

Begah via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jun 9 03:42:55 PDT 2016


I have a really weird bug in my application, i succeeded in 
making a small program with the bare munimum to show that bug.

The full source code of the application + a dub.json file are at 
https://github.com/Begah/D_Pointer_Problem ( < 300 LOC )

I have a template called ResourceManager (asset.d) which takes in 
an asset ( Texture or Model ) and return a handle to it.
A handle has a pointer to the asset as well as a pointer to an 
integer ( referenceCounter ) both allocated by C's malloc.

First, i call ResourceManager!(Model).get("Coin.obj"). This 
function checks if that resource is already loaded, if not ( and 
in this case it's not ) then it calls model.loadModel();
A model has an array of textures, for simplicity sakes, in this 
example i only add one texture.
Before model.loadModel returns the struct created, i first prints 
the location and value of the referenceCounter of the first 
texture in the model :
	Logger.info(model.textures[0].referenceCount);
	Logger.info(*model.textures[0].referenceCount);
	
For example it prints :
	INFO (source\model.d|38) : 597F08     <- Location of the 
referenceCounter
	INFO (source\model.d|39) : 2          <- Value of the 
referenceCounter
	
Next, model.loadModel return the model structure to 
ResourceManager!(Model).get("Coin.obj") :
	AssetType asset = loadFunc(asset_name, args);

	static if(is(model.Model == AssetType)) {
		Logger.info(asset.textures[0].referenceCount);
		Logger.info(*asset.textures[0].referenceCount);
		Logger.info(asset.textures[0].referenceCount);
	}
	
And this is where my application, when 
ResourceManager!(Model).get("Coin.obj") prints the location and 
value of the first texture's referenceCounter.
This prints :
	INFO (source\assets.d|83) : 597F08    <- Location of the 
referenceCounter
	INFO (source\assets.d|84) : 1         <- Value of the 
referenceCounter
	INFO (source\assets.d|85) : 434A7C    <- Location of the 
referenceCounter ( again )
	
These three lines of code does nothing except prints to the 
console.
As you can see, for some reason, the location of the 
referenceCounter changes for no apparant reason.
I have done many different test and changes but i can't 
understand why this bug is happening, any ideas?


More information about the Digitalmars-d-learn mailing list