我用boost :: random得到了一個相對嚴重的問題。 背景:我在Windows 7 x64上使用TDM-GCC x64。編譯器選項-g -Wall -fexceptions 我建立使用相同的編譯器環境加速,但是這不應該不管用隨機時,因爲它是僅標頭當使用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();
}
當我把這個功能我的程序與ntdll.dll的模塊中的錯誤c0000026崩潰。 崩潰總是由gdb在boost的隨機數引擎()的()操作符的第一行顯示(在這種情況下,它位於文件mersenne_twiseter.hpp的第319行,即「if(i == n) 「 - 實際上並不是我期望導致崩潰的東西)。更奇怪的是,這次崩潰剛剛出現 - 我沒有提交任何代碼更改,只是一個(乾淨的)重新編譯,並且在第一次顯示崩潰之後的每個構建都崩潰了....!?
我現在花大約一個小時搜索互聯網這個神祕c0000026錯誤,但沒有發現任何東西....居停
有人得到了一個提示如何解決這個問題?
謝謝你的指針,這裏是:this-> m_prng = new PRNG_GENERATOR(this-> m_ec.map_randseed);然而,this-> m_prng只用於上面的函數和這個類的構造函數......目前我使用srand + rand進行測試,但是它們在均勻分佈和「隨機性」方面並不令人滿意, – dom0 2011-03-25 13:29:14
@csde:您是否確定'PRNG_GENERATOR'是在每個翻譯單元中以相同的方式定義的#define?類範圍中的'typedef'更多的是C++的精神,並允許編譯器進行更多的類型檢查。 – 2011-03-25 16:45:53
@csde:我會做的另一個建議是將你的代碼剝離到一個最小的,自包含的,可編譯的例子,它能夠再現你所看到的崩潰。通過這個練習,你很可能會自己發現問題。如果沒有,至少你會有一個小的,獨立的例子,你可以在這裏發佈。沒有看到所有的代碼,很難說出錯的可能性。 – 2011-03-25 16:58:45