使用boost::random时崩溃

使用boost::random时崩溃,boost,random,crash,Boost,Random,Crash,我遇到了boost::random的一个相对严重的问题。 背景:我在Windows7x64上使用TDM-GCC64。编译器选项是-g-Wall-feexceptions 我使用相同的编译器环境构建Boost,但这在使用random时并不重要,因为它只是头(?) 现在我的问题是: 我得到了这个函数: #define PRNG_GENERATOR boost::mt19937 COORD function_g(int depth) { double _range;

我遇到了boost::random的一个相对严重的问题。 背景:我在Windows7x64上使用TDM-GCC64。编译器选项是-g-Wall-feexceptions 我使用相同的编译器环境构建Boost,但这在使用random时并不重要,因为它只是头(?)

现在我的问题是: 我得到了这个函数:

#define PRNG_GENERATOR boost::mt19937

COORD function_g(int depth)
    {
        double _range;
        _range = 1/(depth + 1.0f);

        boost::uniform_real<double> range(-_range, _range);

        boost::variate_generator<PRNG_GENERATOR&, boost::uniform_real<double> > v_png(*this->m_prng, range);

        return v_png();
    }
#定义PRNG#U发电机升压::mt19937
坐标函数(整数深度)
{
双量程;
_范围=1/(深度+1.0f);
均匀实数范围(-\u范围,\u范围);
变量发生器v_png(*this->m_prng,range);
返回v_png();
}
当我调用此函数时,我的程序崩溃,ntdll.dll模块中出现c0000026错误。 崩溃总是由gdb显示在boost随机数引擎()运算符的第一行(在本例中,它位于文件mersenne_twiseter.hpp的第319行,即“if(i==n)”——实际上不是我预期会导致崩溃的内容)。 更奇怪的是,这个崩溃刚刚出现——我没有提交任何代码更改,只是(干净的)重新编译,在第一次显示崩溃后的每个构建都崩溃了

我现在花了大约一个小时在互联网上搜索这个神秘的c0000026错误,但没有发现任何有价值的东西


有人知道如何解决这个问题吗?

您还没有向我们展示如何初始化
这个->m\u prng
。你确定它指向一个有效的
类型为boost::mt19937的对象?就我所知,它的其余部分看起来还不错。

啊,谢谢你的指针,这里是:this->m_prng=new prng_生成器(this->m_ec.map\u randseed);然而,这个->m_prng只在上面的函数和这里显示的类的构造函数中使用。。。目前我使用srand+rand进行测试,但它们在均匀分布和“随机性”方面并不令人满意@csde:您是否绝对确定
PRNG_生成器在每个翻译单元中定义相同?在类范围内, TyPulf将更符合C++的精神,并允许编译器进行更多类型检查。@ CSDE:我提出的另一个建议是将代码剥离到一个最小的、自包含的、可编译的示例中,以再现您所看到的崩溃。通过练习,你很有可能自己发现问题。如果没有,至少你会有一个小的,独立的例子,你可以张贴在这里。在没有看到所有相关代码的情况下,很难说会出什么问题。我现在跟踪到checked_delete.hpp。我通过使用Boost将所有函数移动到一个额外的DLL解决了这个问题。嗯,不是很干净,也不是很灵活,但它不会崩溃(目前)。。。