5

私はunordered_mapC++ でハッシュマップとして使用していますが、そこに何かを保存しようとすると、次のようになります。

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

4

1 に答える 1

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適切にの使用を更新します。

于 2015-09-12T02:13:05.813 に答える