Boost logo

Boost Users :

Subject: Re: [Boost-users] Segmentation fault in lagged fibonacci random number generator
From: Matthias Troyer (troyer_at_[hidden])
Date: 2010-07-20 15:55:56


On 20 Jul 2010, at 13:08, Moritz Beber wrote:

> Dear boost users,
>
> I have a very strange segmentation fault in lagged fibonacci and unfortunately, I was not able to reduce the problem to a simple example yet. I know that stinks of the problem coming from my code but please bear with me for a moment.
>
> I have two classes that both use the same other class for some random number generation. The two classes differ only in one unrelated function. If I run my program with one class everything works just fine, if I run it with the other after a few iterations the error occurs. I have no idea why, since they both use the exact same class from which the error occurs.
>
> I use the following code to get my generators:
>
> typedef boost::uniform_smallint<short unsigned> Small;
> typedef boost::variate_generator<rfn::RandGen&, Small> Small_Number;
>
> Small* _us_dist = new Small(1, 20);
> Small_Number* _len_gen = new Small_Number(rfn::Mutation::_parameters->rng(), *_us_dist);
>
> Where rfn::Mutation::_parameters->rng() gives me a reference from a lagged_fibonacci object held in that class.
>
> I then try to get a number in the following way:
>
> short unsigned length = (*_len_gen)();
>
> I have attached a gdb run of the program crashing. If you have any ideas where I can look for this error please tell me. It's also no problem for me to send you the complete sources but it's a rather big project.

Could it be a lifetime problem, i.e. is the object returned by fn::Mutation::_parameters->rng() destroyed before your call?
One way to check is to define Small_Number as boost::variate_generator<rfn::RandGen, Small> (note there is no & after RandGen). That way the generator is copied.

Matthias


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net