2012-11-01 43 views
0

UPDATE 嗯,我有一個更新。顯然,我的一大堆「unsigned long long fhash [105] [100555]」在vC++中沒有被自動初始化爲零......當我做了= {0}時它就起作用了。它不應該自動初始化嗎?VC++ 2010 vs G ++無符號long long溢出差異

我在做比賽編程,我通常在學校/ ideone等編譯g ++,但我必須使用VC++ 2010編譯器。這就是說,我有代碼做多項式滾動散列(就像在Rabin-Karp中使用),但在這些編譯器上做這些溢出是不同的嗎?

代碼是在這裏:http://pastebin.com/UFdpwHCt(哈希大約是67行)

輸出是在這裏:http://i.imgur.com/KCcvI.png

爲什麼 「bhash」 是兩種編譯器之間的平等,但 「fhash」 是不是?他們使用相同的方法散列...在G ++ - 3輸出中,「fhash」和「bhash」輸出是相同的(他們應該是這樣),但在VC++ - 10中輸出「fhash」和「bhash 「是不一樣的...

我使用溢出來讓它自己修改自己,以加速執行,而不是顯式地用大素數來修改它。

+0

['include '](http://stackoverflow.com/questions/126279/c99-stdint-h-header-and-ms-visual-studio)並使用任何大小的「uint ?? _ t」需要。 (可能[this](http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml)並不相關,但我認爲這值得您閱讀。關於您的問題的部分是[here] (http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml?showone=Integer_Types#Integer_Types))。 – elmigranto

+0

嗯,我有一個更新。顯然,我的一大堆「unsigned long long fhash [105] [100555]」在vC++中沒有被自動初始化爲零......當我做了= {0}時它就起作用了。它不應該自動初始化嗎? – dave

+1

不,它不會被隱式調零(除非你用['calloc'](http://www.cplusplus.com/reference/clibrary/cstdlib/calloc/)分配memeroy,但爲什麼你想用C++ ?)。內存塊將包含隨機的東西,實際上,這可能會發生爲零,但當然,你永遠不應該依賴它。 (有關詳細信息,請參閱ISO C++標準。) – elmigranto

回答

0

不是問題。問題在於它沒有被初始化爲零。使用memset修復它。