将内容存储到unordered_map时的浮点异常

时间:2013-10-24 03:47:51

标签: c++ unordered-map

我在C ++中使用unordered_map作为哈希映射,但每当我尝试在那里存储任何东西时,我得到:

Floating point exception: 8

有谁可以指出错误是什么?以下是我初始化地图的方式(table_entry只是一个结构):

std::tr1::unordered_map<unsigned short, table_entry*> forwarding_table;

然后我通过这样做了一个条目:

unsigned short dest_id = 0;    
table_entry *entry = (table_entry *)malloc(sizeof(table_entry));   
forwarding_table[dest_id] = entry;

我的结构定义是:

typedef struct table_entry {
    unsigned short next_hop;
    unsigned int cost;
} table_entry;

就我的编译器版本而言,当我运行g++ -v时,我得到了这个:

Configured with: /private/var/tmp/llvmgcc42/llvmgcc42-2336.11~182/src/configure --disable-checking --enable-werror --prefix=/Applications/Xcode.app/Contents/Developer/usr/llvm-gcc-4.2 --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-prefix=llvm- --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin11 --enable-llvm=/private/var/tmp/llvmgcc42/llvmgcc42-2336.11~182/dst-llvmCore/Developer/usr/local --program-prefix=i686-apple-darwin11- --host=x86_64-apple-darwin11 --target=i686-apple-darwin11 --with-gxx-include-dir=/usr/include/c++/4.2.1 Thread model: posix gcc version 4.2.1

1 个答案:

答案 0 :(得分:3)

我最近使用std::unordered_map<>的各种实例来遇到同样的问题。但是,我只能在地图是共享对象的全局时重现问题。如果地图在程序中声明为全局,或者在函数中声明为本地,则问题不会显现。

(注意:我使用的是GCC 4.9.4,32位模式,-std = c ++ 11)

似乎在堆上分配std::unordered_map<>解决了我的问题。也许它可以解决你的问题?考虑更换:

std::tr1::unordered_map<unsigned short, table_entry*> forwarding_table;

std::tr1::unordered_map<unsigned short, table_entry*>* forwarding_table;

然后适当更新forwarding_table的使用。