2012-04-09 63 views
0

我使用以下函數試圖在地圖向量中查找地圖元素的關鍵點。在地圖向量中查找對

Entry* SymTab::lookup(const char* name) 
{ 
for (int i=0;i<table.size();i++) //table is the vector 
{ 
    map<const char*, Entry, ltstr>::iterator its= table.at(i).find(name); 
    if (its != cur.end()) 
    { 
    Entry* obj = &its->second; 
    cout<<(*its).first<<endl; 
    return obj; 
    } 


    } 
}  

該函數可以正確返回第一個向量索引(at(0))內的任何項目的值。但是,只要我嘗試訪問第二個索引內的元素(在(1))就會出現段錯誤。我確定地圖已經正確插入並填充在第二個索引處。

有沒有人在這裏看到這個問題?

+1

什麼是'cur'?如果在每次循環迭代時都不更新它,則無法識別何時不存在元素。 – leftaroundabout 2012-04-09 16:33:27

+1

'const char *'的映射鍵幾乎不是一個好主意。內存是如何管理的關鍵點? – Chad 2012-04-09 16:36:12

+1

如果你希望它在將來可以避免這種麻煩,我會添加一些C++ 11糖:'Entry * SymTab :: lookup(const std :: string&name)' '''' ' (auto&cur:table)//表格是矢量' '{' 'auto它= cur.find(name); '' 如果(!其= cur.end())'' {'' COUT <<(*其)。首先<< ENDL;'' 返回&的─>第二;'' }'' }' '}' – leftaroundabout 2012-04-09 16:39:34

回答

5

有沒有人在這裏看到這個問題?

是的。 cur不會跟蹤當前的地圖。

嘗試用替換if行:

if (its != table.at(i).end()) 
+0

哦哇,不敢相信我忽略了...謝謝。 – Leif 2012-04-09 16:38:20