2012-01-15 84 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