unordered_map.find кидает исключение, если у меня ключ enum class
От: пффф  
Дата: 23.07.24 13:52
Оценка:
Привет!

Вернее, там деление на ноль происходит (ещё вернее, %), но я что-то пока не разобрался, с какого перепугу. GCC 7.3, С++17, что за фигня, никто не сталкивался?

C:\Qt\Qt5.12.12\Tools\mingw730_32\lib\gcc\i686-w64-mingw32\7.3.0\include\c++\bits\hashtable_policy.h:439
struct _Mod_range_hashing
  {
    typedef std::size_t first_argument_type;
    typedef std::size_t second_argument_type;
    typedef std::size_t result_type;

    result_type
    operator()(first_argument_type __num,
           second_argument_type __den) const noexcept
    { return __num % __den; } // Вот это почему-то ноль
  };
Re: unordered_map.find кидает исключение, если у меня ключ enum class
От: reversecode google
Дата: 23.07.24 14:02
Оценка: -3
какой какой у марти опыт программирования напомните?
аа 20+ лет
а что такое дебагер, марти не знает или просто прикидывается хромокряком ?
смешно
Re: unordered_map.find кидает исключение, если у меня ключ enum class
От: B0FEE664  
Дата: 23.07.24 15:43
Оценка:
Здравствуйте, пффф, Вы писали:

П>Вернее, там деление на ноль происходит (ещё вернее, %), но я что-то пока не разобрался, с какого перепугу. GCC 7.3, С++17, что за фигня, никто не сталкивался?

static init fiasco
И каждый день — без права на ошибку...
Re: unordered_map.find кидает исключение, если у меня ключ enum class
От: Кодт Россия  
Дата: 24.07.24 15:04
Оценка:
Здравствуйте, пффф, Вы писали:

П>Вернее, там деление на ноль происходит (ещё вернее, %), но я что-то пока не разобрался, с какого перепугу. GCC 7.3, С++17, что за фигня, никто не сталкивался?


Покажи свой код, а не потроха мингвы.
В каких условиях происходит это деление на ноль? Что там со стектрейсом?

Попробуй собрать с санитайзерами — asan или tsan.
Возможно, у тебя тупо расстрел памяти или какая-то чёртова гонка.
Перекуём баги на фичи!
Re[2]: unordered_map.find кидает исключение, если у меня ключ enum class
От: пффф  
Дата: 24.07.24 15:18
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Покажи свой код, а не потроха мингвы.

К>В каких условиях происходит это деление на ноль? Что там со стектрейсом?

Сорян, я разобрался

Просто в VSCode+GDB адски неудобно отлаживаться по срвнению с привычной вижуалкой, поэтому я сначала погуглил, и накопал, что раньше низя было enum'ы в unordered_map использовать, то ли просто ошибку компиляции выдает, то ли ещё что-то, уже не помню, и решил, что у меня что-то из этой оперы. Но рецепта не нашел, и решил тут спросить, думал, может кто что слышал


К>Попробуй собрать с санитайзерами — asan или tsan.

К>Возможно, у тебя тупо расстрел памяти или какая-то чёртова гонка.

В итоге подебажил, и обнаружил что в функции забыл вернуть ссылку на статик мапу, которую потом использую, те. тупо функция без return была. В MSVC мне бы сразу показало проблему, там вообще была бы ошибка компиляции, а тут пока не разобрался, как сделать чтобы и было также строго, как в MSVC, но чтобы при необходимости давить то, что я знаю
Re[2]: unordered_map.find кидает исключение, если у меня ключ enum class
От: пффф  
Дата: 24.07.24 15:18
Оценка:
Здравствуйте, B0FEE664, Вы писали:

П>>Вернее, там деление на ноль происходит (ещё вернее, %), но я что-то пока не разобрался, с какого перепугу. GCC 7.3, С++17, что за фигня, никто не сталкивался?

BFE>static init fiasco

Да, что-то такое оказалось
Re[3]: unordered_map.find кидает исключение, если у меня ключ enum class
От: Кодт Россия  
Дата: 24.07.24 15:48
Оценка:
Здравствуйте, пффф, Вы писали:

П>В итоге подебажил, и обнаружил что в функции забыл вернуть ссылку на статик мапу, которую потом использую, те. тупо функция без return была.


-Werror -Wall
и будут тебе ошибки компиляции в ассортименте
Перекуём баги на фичи!
Re[2]: unordered_map.find кидает исключение, если у меня ключ enum class
От: serg_joker Украина  
Дата: 24.07.24 16:03
Оценка:
Здравствуйте, Кодт, Вы писали:
К>Покажи...
К>Попробуй...
Ему некогда, его борьба на другом форуме.
Re[4]: unordered_map.find кидает исключение, если у меня ключ enum class
От: пффф  
Дата: 24.07.24 16:09
Оценка:
Здравствуйте, Кодт, Вы писали:

П>>В итоге подебажил, и обнаружил что в функции забыл вернуть ссылку на статик мапу, которую потом использую, те. тупо функция без return была.


К>-Werror -Wall

К>и будут тебе ошибки компиляции в ассортименте

Это я знаю, но слишком много лезет

На MSVC так и делаю
Re[3]: unordered_map.find кидает исключение, если у меня ключ enum class
От: sergii.p  
Дата: 24.07.24 18:56
Оценка:
Здравствуйте, пффф, Вы писали:

П>Здравствуйте, Кодт, Вы писали:


К>>Покажи свой код, а не потроха мингвы.


П>В итоге подебажил, и обнаружил что в функции забыл вернуть ссылку на статик мапу, которую потом использую, те. тупо функция без return была. В MSVC мне бы сразу показало проблему, там вообще была бы ошибка компиляции, а тут пока не разобрался, как сделать чтобы и было также строго, как в MSVC, но чтобы при необходимости давить то, что я знаю


можете привести минимальный код? Ну сразу же ветка станет интереснее. По описанию ничего не понятно.
Re[4]: unordered_map.find кидает исключение, если у меня клю
От: пффф  
Дата: 25.07.24 10:08
Оценка: 2 (1)
Здравствуйте, sergii.p, Вы писали:

П>>В итоге подебажил, и обнаружил что в функции забыл вернуть ссылку на статик мапу, которую потом использую, те. тупо функция без return была. В MSVC мне бы сразу показало проблему, там вообще была бы ошибка компиляции, а тут пока не разобрался, как сделать чтобы и было также строго, как в MSVC, но чтобы при необходимости давить то, что я знаю


SP>можете привести минимальный код? Ну сразу же ветка станет интереснее. По описанию ничего не понятно.


Да легко. Всё очень примитивно

using TagLineExtraParser = std::function<std::string::const_iterator (Tag&, TagType, std::string::const_iterator, std::string::const_iterator)>;

using TagLineExtraParsersMap = std::unordered_map<TagType, TagLineExtraParser>;

TagLineExtraParsersMap makeTagLineExtraParsersMap()
{
    TagLineExtraParsersMap m;

    m[TagType::code] = [](Tag &tag, TagType tagType, std::string::const_iterator b, std::string::const_iterator e)
                        {
                            return parseTagExtraTitle(tag, b, e);
                        };

    return m; // !!! Вот это забыл
}

const TagLineExtraParsersMap& getTagLineExtraParsersMap()
{
    static auto m = makeTagLineExtraParsersMap();
    return m; // !!! Или это забыл, уже забыл, что забыл
}

std::string::const_iterator tagLineExtraParse(Tag &tag, TagType tagType, std::string::const_iterator b, std::string::const_iterator e)
{
    auto &m = getTagLineExtraParsersMap();
    auto it = m.find(tagType); // !!! Падало где-то тут в недрах
    if (it==m.end())
        return e;

    return it->second(tag, tagType, b, e);
}
Отредактировано 25.07.2024 14:47 пффф . Предыдущая версия .
Re[5]: unordered_map.find кидает исключение, если у меня клю
От: Умака Кумакаки Ниоткуда  
Дата: 09.08.24 06:51
Оценка: -1
Здравствуйте, пффф, Вы писали:

в каком-нибудь фгупе работаешь? за статики обычно первый раз разъяснительная беседа, а на второй сразу чёрная метка и с вещами на выход
нормально делай — нормально будет
Re[6]: unordered_map.find кидает исключение, если у меня клю
От: пффф  
Дата: 09.08.24 10:06
Оценка: -1
Здравствуйте, Умака Кумакаки, Вы писали:

УК>в каком-нибудь фгупе работаешь? за статики обычно первый раз разъяснительная беседа, а на второй сразу чёрная метка и с вещами на выход


Тебе сразу черная метка
Re[7]: unordered_map.find кидает исключение, если у меня клю
От: Умака Кумакаки Ниоткуда  
Дата: 09.08.24 11:46
Оценка:
Здравствуйте, пффф, Вы писали:

П>Тебе сразу черная метка


не обижайся, просто слушайся старших
нормально делай — нормально будет
Re[8]: unordered_map.find кидает исключение, если у меня клю
От: пффф  
Дата: 09.08.24 12:16
Оценка:
Здравствуйте, Умака Кумакаки, Вы писали:

П>>Тебе сразу черная метка


УК>не обижайся, просто слушайся старших


Я не обижаюсь, и старших слушаю. Тебя-то зачем? Ты в трех строчках не понял, что там делается.
Re[9]: unordered_map.find кидает исключение, если у меня клю
От: Умака Кумакаки Ниоткуда  
Дата: 10.08.24 16:16
Оценка:
Здравствуйте, пффф, Вы писали:

П>Я не обижаюсь, и старших слушаю. Тебя-то зачем? Ты в трех строчках не понял, что там делается.


о да, за четверть века программирования на крестах первый раз вижу синглтон (майерса), открыл мне неразумному глаза, спасибо

P.S. стейтфул синглтон это антипаттерн, если ты не в курсе, исправь.
нормально делай — нормально будет
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.