2012-01-15 80 views
-5

我正在处理应用程序中的一些崩溃问题,并想知道是否有人可以提供帮助。分段错误 - std :: _ Rb_tree

GDB:

http://pastebin.com/tW6HzY2Y 这是什么原因?我使用的是Ubuntu 10.04.3。

编辑: 看喜欢的问题是在这里:

bool ChatChannel::removeUser(Player* player) 
{ 
    UsersMap::iterator it = m_users.find(player->getID()); 
    if(it == m_users.end()) 
     return false; 

    m_users.erase(it); 

    return true; 
} 

这很奇怪,从来就没有这个部分的任何问题。我不知道如何重现错误。

+3

这是...太少的信息,无法使用。 – Xeo 2012-01-15 19:26:09

+2

问题是你的代码中有一个bug。但是不可能提出这可能是什么,因为你没有显示任何代码。请考虑创建一个[**最小测试用例**](http://sscce.org)。 – 2012-01-15 19:26:36

+0

你能举个例子说明可能导致这种情况的原因吗?我不能给代码我不知道问题出在哪里。 – user1150772 2012-01-15 19:27:54

回答

0

根据valgrind运行您的程序。在实际崩溃之前,它几乎肯定会吐出一些错误,这可能更接近错误的根源(而不是附带损害)。

1

从其他建议中没有太多要去。您链接的堆栈跟踪几乎没有任何信息。然而,有一点可以安全地说:基于this=0x38,你试图在一个不是树的对象中找到某个东西。我个人的猜测是,包含你的std::map<unsigned int, Player>的数据结构在有几个其他成员(总大小为56字节)之后有这个映射,但你试图通过NULL指针访问这个数据结构。也就是说,尽管分段错误发生在std::_Rb_tree中,但根本不在std::map实施中。

+0

疯狂的诊断技能! :) +1 – Xeo 2012-01-15 20:34:14