Исключение с плавающей точкой при сохранении чего-либо в unordered_map

я использую unordered_map как хэш-карту в C ++, но всякий раз, когда я пытаюсь что-то там хранить, я получаю:

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

Решение

Недавно я столкнулся с той же проблемой, используя различные экземпляры 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 соответственно.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]