How to check a struct exists at a particular memory address?

Igor via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu May 18 14:09:06 PDT 2017


On Thursday, 18 May 2017 at 20:20:47 UTC, Gary Willoughby wrote:
> This might be a really silly question but:
>
> I've allocated some memory like this (Foo is a struct):
>
>     this._data = cast(Foo*) calloc(n, Foo.sizeof);
>
> How can I then later check that there is a valid Foo at 
> `this._data` or `this._data + n`?

Well... I think the right answer is that everything you do with 
memory should be very deterministic so you should just know where 
is what and not have a need to check :).

The only thing that crosses my mind if you really need to check 
is to make sure you always write some specific big number just 
before each struct in memory as a flag that what follows is Foo 
and then you can check if that is set properly. I think you could 
do this by wrapping Foo in another struct whose first field is 
immutable long set to some specific value (that isn't zero) :) 
and then using that struct in place of Foo. Although I am not 
sure if compiler would optimize away checks if an immutable is 
equal to its init value...


More information about the Digitalmars-d-learn mailing list