将某些内容存储到unordered_map时出现浮点异常

问题描述 投票:0回答:2

我在 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

c++ unordered-map
2个回答
4
投票

我最近在使用

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
的用法。


0
投票

问题是无效的初始化。我们不能在 C++ 标准库初始化中使用“malloc”,因为 malloc 不会“构造”对象。

在C++中,对象包含虚拟表,这些虚拟表不是由“malloc/memset”创建的。

© www.soinside.com 2019 - 2024. All rights reserved.