[英]std::iterator segmentation fault when using it as a class variable
請考慮以下代碼段
class ItrTest {
private:
std::map<int, long> testMap;
std::map<int, long>::iterator itr;
public:
ItrTest(std::map<int, long> testMap): testMap(testMap) {
itr = testMap.begin();
}
void printNext() {
// itr = testMap.begin();
for (; itr != testMap.end(); itr++) {
cout<<"Key: "<<itr->first<<" Value:"<<itr->second<<endl;
}
}
};
int main() {
std::map<int, long> m{
{ 0, 100l },
{ 1, 200l },
{ 2, 300l },
{ 3, 400l },
{ 4, 500l },
};
ItrTest t(std::move(m));
t.printNext();
}
當嘗試訪問迭代器內的值時,這會引發分段錯誤。 很明顯,這是因為迭代器變得無效(對我來說經過幾次迭代后。也許它在不同的系統上表現不同)。 如果我取消注釋函數printNext()
的第一行,它可以正常工作。 我想得到這種行為的解釋。
在構造函數中,for itr = testMap.begin();
, testMap
是指函數參數,而不是數據成員。 當離開構造函數時,它會被打亂, itr
。 之后的任何解除引用都會導致UB。
你可以改成它
itr = this->testMap.begin();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.