2014-11-05 93 views
1
void huffmanDecode(string str){ 

string temp; 
map<string, char>::iterator it; 
//for(auto iter=myMap.begin();iter!=myMap.end();++iter) 
    //cout<<iter->first<<" "<<iter->second<<" "<<endl; 

for (unsigned int i = 0; i < str.size(); i++) 
{ 
    temp += str[i]; 
    it = myMap.find(temp); 
    if (it == myMap.end()) 
     continue; 
    else 
    { 
     cout<<it->first<<" ";//crashed here, "Thread 1:EXC_BAD_ACCESS(code=1,address=0x0) 
     //cout << it->second << " "; 
     temp = nullptr; 
    } 
} 
} 

我試圖通過地圖解決huffmandecode問題,但它墜毀~~~問題有關地圖STL

+4

你真的不想做這樣的:'溫度= nullptr;'。這可能是墜機的原因。 – juanchopanza 2014-11-05 09:05:28

+0

我會嘗試一下。那麼temp = NULL如何? – Jimmy 2014-11-05 09:07:25

+0

嘗試temp.clear() – 2014-11-05 09:07:50

回答

3

std::string::operator=具有過載,需要一個const char*。這是使用過載時,你說

temp = nullptr; 

現在,一個要求是const char*點到null-terminated string。因此它不能是空指針。在這種情況下,您不允許傳遞空指針,並允許實現引發異常。無論如何,試圖使用這樣的字符串將導致未定義的行爲std::string構造函數有類似的情況。

如果你的目的是要重新設置temp是一個空字符串,你有幾種選擇:

temp = ""; 
temp.clear(); 
temp = std::string(); 
2

您已經定義tempstd::string,而不是作爲一個指針。 因此將其設置爲nullptr是錯誤的!

如果你想清除其中的內容,我假設你真的想,試試這個:

temp.clear(); 
+1

非常感謝。我也許明白了。 – Jimmy 2014-11-05 09:15:44

+0

你的答案雖然沒有解釋任何東西。 – juanchopanza 2014-11-05 09:21:12

+0

@juanchopanza我想OP需要關於崩潰的幫助! – CinCout 2014-11-05 09:22:45