Random juce assertion?


#1

My code doesn't pass this juce assertion. What could be the cause?

int Random::nextInt (const int maxValue) noexcept
{
    jassert (maxValue > 0);
    return (int) ((((unsigned int) nextInt()) * (uint64) maxValue) >> 32);
}

I declare the random instance in a class owned by another class and this assertion is passed until i send something in the constructor to the owned class, (looks to me like that should be completely unrelated).

I'm probably lacking some basic c++ syntax understanding.

Thanks


#2

If your debugger already stopped at the assert, it should also tell you the value of maxValue. And it is less than 0 otherwise the assert would have passed.

Reason 1: the calling parameter is not initiallized - the assert appears random

Reason 2:  the value exceeds 2^15, the boundary of signed short int (I hope this is still valid nowadays, when bits became cheap). Numbers with the first bit set are considered to be negative.

HTH


#3

Thank you!

Yeah my debugger stops there, maxValue is 0 so it "triggers" the assert. 0 means it's not reason 2, right?

I initialize my Random like this:

public:  

   ScopedPointer<Random> mRand = new Random();

It all works just fine, until I change my code to pass some (completely unrelated) variable, to the constructor of this class, from the owner class. Why could that be?

If it is reason 1, I don't understand how to fix it. I simply use it like this:

number1 = mRand->nextInt(30);

thanks!

EDIT:

Nevermind, the variable I sent was totally related and wasn't initialized properly, I'm an idiot and again, thank you!!

/d

 


#4

...happens to the best of us ;-)