std:unordered_map insertion <value,struct =“”>;算术异常den__为零

时间:2017-11-24 11:32:51

标签: c++ struct hashmap gdb

我有一个代码,我在unordered_map中插入一个struct。

INFO Info( v1, UINT_MAX, v3, v4, v5 );
hmap_.insert( std::pair< key,INFO >( v1, Info ) );

在上面一行我使用gdb设置了一个断点并打印了所有变量的值:所有都很好按预期打印。

(gdb) p Info
$4 = {v1_ = valid_value, v2 = valid_value, v3 = , v4 = valid_value, v4 = valid_value}

现在我使用

进入哈希映射的插入函数
(gdb) s

我得到了

(gdb) s
std::pair<unsigned long, namespace::class::Info>::pair<unsigned long&, namespace::class::Info&, true> (this=0x7fffffffd7e0, __x=@0x7fffffffd768: 1100000000000549, __y=...) at /usr/include/c++/7/bits/stl_pair.h:331
331     : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) { }
(gdb) n

Thread 1 "test_1" received signal SIGFPE, Arithmetic exception.
0x000055555556b105 in std::__detail::_Mod_range_hashing::operator() (this=0x555555e09ec0, __num=1100000000000549, __den=0) at /usr/include/c++/7/bits/hashtable_policy.h:448
448     { return __num % __den; }

正如在gdb中可以看到的那样:在进行散列时,它会产生分母,它是从第二个变量生成的,它的值已打印且正确,为零(__den = 0)!

我在另一个带有普通构造函数的文件中有一个struct Info:

struct INFO
            {    
                Info():
                    v1_( 0 ), v2_( UINT_MAX ), v_3( INVALID ),
                    v4_( 0 ), v5_( 0 )
                {}

                Info( value_type1 v1, const value_type2& v2,
                        value_type3 v3, value_type4 v4, value_type5 v5 ):
                    v1_( v1 ), v2_( v2 ),
                    v3_( side ), v4_( v4 ), v5_( v5 )
                {}

                value_type1 v1_ ;

                value_type2 v2_ ;

                value_type3 v3_ ;

                value_type4 v4_ ;

                value_type5 v5_ ;
            };

为什么在对我所猜测的deomator进行散列时,从该对的第二个值(即有效值)创建的数据将变为零并生成算术异常。 感谢

0 个答案:

没有答案