C++ 为什么std string==崩溃?

C++ 为什么std string==崩溃?,c++,C++,在调试模式下运行应用程序时,有时会在此函数中出现运行时错误: void ChatListHandler::seatOccupancyChanged( const std::string& userName, bool occupied, bool isSelf, bool isSelfTable, int tableNo, int seatNo, int numPlayersAtTable ) { if(!isSelf && (isInGroup(userName

在调试模式下运行应用程序时,有时会在此函数中出现运行时错误:

void ChatListHandler::seatOccupancyChanged( const std::string& userName, bool occupied, bool isSelf, bool isSelfTable, int tableNo, int seatNo, int numPlayersAtTable )
{
    if(!isSelf && (isInGroup(userName,IN_GAME_GROUP) || isInGroup(userName,IN_LOBBY_GROUP)))
    {
        if(occupied)
        {
            movePlayer(userName,IN_GAME_GROUP);
        }
        else
        {
            movePlayer(userName,IN_LOBBY_GROUP);
        }
    }
}

bool ChatListHandler::isInGroup( const std::string& name, GroupTypeEnum group )
{
    for(size_t i = 0; i < m_groups.size(); ++i)
    {
        if(m_groups[i].second == group)
        {
            if(m_groups[i].first->getList())
            {
                for(agui::ListItem::iterator it = 
                    m_groups[i].first->getList()->getItemsBegin(); it !=
                    m_groups[i].first->getList()->getItemsEnd(); ++it)
                {
                    if((*it).first.text == name)
                    {
                        return true;
                    }
                }
            }

            break;
        }
    }

    return false;

    m_list->repositionGroups();
}
我得到:

Unhandled exception at 0x5fd1942c (msvcp90d.dll) in my.exe: 0xC0000005: Access violation reading location 0x00000040.
调用堆栈如下所示:


谢谢

如果没有看到所有的代码,我无法确定,但我猜错误与这些行有关:

for(agui::ListItem::iterator it =
                m_groups[i].first->getList()->getItemsBegin(); it !=
                m_groups[i].first->getList()->getItemsEnd(); ++it)
除非每次调用
getList()
总是返回完全相同的列表(即指向同一列表的指针,而不是副本),否则您可能会在不同的列表上获得迭代器。这意味着检查
it!=m_groups[i].first->getList()->getItemsEnd()
总是
false
,因为迭代器来自不同的列表。在这种情况下,迭代器可能会离开列表的末尾,因此取消引用将导致崩溃


希望这有帮助

请发布一个真正的堆栈跟踪。。。
for(agui::ListItem::iterator it =
                m_groups[i].first->getList()->getItemsBegin(); it !=
                m_groups[i].first->getList()->getItemsEnd(); ++it)