gpt4 book ai didi

c++ - std::map 迭代在第一次运行时出错

转载 作者:行者123 更新时间:2023-11-30 05:23:47 24 4
gpt4 key购买 nike

我有一个 std::map 来存储指向与其各自 ID 关联的对象的指针。当我在 map 上循环获取它的内容时,第一次尝试返回错误,但在下一次尝试时返回正确:

class session_list {
private:
...
static std::map<uint, session*> session_list;
...
public:
...
static void add_exclusive_session(uint id, session& session);
...
std::map<uint, session*>& get_session_list() ;
};
std::map<uint, core_base_session*>& core_session_list::get_session_list() {
return session_list;
}

void session_list::add_exclusive_session(uint id, session& session) {
guard g(mutex);
if (session.disconnect_reason != core_sd_connected)
return;
session * previous_session = get_session(id, g);
session_list.emplace(id, &session);
if ((previous_session != nullptr)
&&(previous_session != &session)) {
previous_session->disconnect(core_sd_peer_duplicated);
}
}
std::map<uint, session*> session_list =
session.parent.session_list->get_session_list();
for ( auto& it: session_list) {
printf("\n\tSESSION N° %d \t %p" , it.first, it.second);
}

它转储这个:

2016-08-18 14:57:23.103881 [info] DBG_

SESSION N° 1402969504 0x7efc400008c0 <=== APPEARS TWICE
SESSION N° 574745422 0x1a469f0
SESSION N° 1402969504 0x7efc400008c0 <=== APPEARS TWICE
SESSION N° 1502939797 0x7efc48000ca0
SESSION N° 1510611043 0x7efc3c000ca0
2016-08-18 14:57:38.245280 [info] DBG_

SESSION N° 2011917896 0x7efc44000ca0 <=== APPEARS NOT ON FIRST TRY
SESSION N° 574745422 0x1a469f0
SESSION N° 1402969504 0x7efc400008c0
SESSION N° 1502939797 0x7efc48000ca0
SESSION N° 1510611043 0x7efc3c000ca0

有什么想法吗?

最佳答案

所以我们在这里看到的是 std::map 对象包含两个相同的键。让我们列举可以解释这种行为的可能性(从最不可能到最可能):

  • 你的编译器的 std::map 从根本上被破坏了并且允许多个相同的键;
  • 您的代码中某处存在未定义的行为,该行为破坏了 session_list
  • SESSION N° 行的第一个序列是由相关代码多次执行产生的,例如

    # run 1
    SESSION N° 1402969504 0x7efc400008c0 <=== APPEARS TWICE
    # run 2
    SESSION N° 574745422 0x1a469f0
    SESSION N° 1402969504 0x7efc400008c0 <=== APPEARS TWICE
    SESSION N° 1502939797 0x7efc48000ca0
    SESSION N° 1510611043 0x7efc3c000ca0

我的钱在最后一个。如果没有看到您的更多代码,很难判断它的可能性有多大。

关于c++ - std::map 迭代在第一次运行时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39019724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com