2011-03-24 73 views
0

我用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錯誤,但沒有發現任何東西....居停

有人得到了一個提示如何解決這個問題?

回答

1

你沒有告訴我們如何初始化this->m_prng。您確定它指向boost::mt19937類型的有效 對象嗎?據我所知,其餘部分看起來沒問題。

+0

謝謝你的指針,這裏是:this-> m_prng = new PRNG_GENERATOR(this-> m_ec.map_randseed);然而,this-> m_prng只用於上面的函數和這個類的構造函數......目前我使用srand + rand進行測試,但是它們在均勻分佈和「隨機性」方面並不令人滿意, – dom0 2011-03-25 13:29:14

+0

@csde:您是否確定'PRNG_GENERATOR'是在每個翻譯單元中以相同的方式定義的#define?類範圍中的'typedef'更多的是C++的精神,並允許編譯器進行更多的類型檢查。 – 2011-03-25 16:45:53

+0

@csde:我會做的另一個建議是將你的代碼剝離到一個最小的,自包含的,可編譯的例子,它能夠再現你所看到的崩潰。通過這個練習,你很可能會自己發現問題。如果沒有,至少你會有一個小的,獨立的例子,你可以在這裏發佈。沒有看到所有的代碼,很難說出錯的可能性。 – 2011-03-25 16:58:45