2012-11-01 140 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修复它。