On Wednesday, 15 November 2017 at 13:30:14 UTC, Adam D. Ruppe wrote:
On Wednesday, 15 November 2017 at 13:24:02 UTC, Chirs Forest wrote:
class Audio {
Audio a;
    writeln(&a); // 281478

&class is usually wrong. That's the address of the reference, not of the actual object. You might want `cast(void*) a` instead to print the address of the object itself.

    writeln(&a); // null

Though why it would ever say null is weird. Maybe one of the lengths you pass to a C function is wrong and it is writing too far and killing one of the hidden thread local pointer variables.

The problem isn't that it's printing null, the problem is that I'm getting an access violation at the points where writeln will return null. writeln(cast(void*)a) gives me slightly different results: It'll start off as null, print an address after the class has been created, and then print a different address after calling load().

I'm not passing any lengths... I'm passing a string, but the function doesn't take a string length (I'm using toStrings to make the cstring and I've tried adding \0 at the end of it too, but it doesn't help). The function takes a struct for options but is meant to take null if you're not doing anything special. Replacing that with a pointer to an instance of that struct will give me an access violation calling writeln(cast(void*)a) after load() (that struct takes the size of itself as its first member and that's set properly).

I'm not really sure what fmod is doing after I call it. Even calling the function to control volume messes with the class address... it might be messing with more than just that, so if it's possible for fmod to be overflowing into the context that called it, that's probably it.

Is there anything I can do about it or should i be contacting the fmod guys, or the derelict binding guys?

Reply via email to