2012-01-12 116 views
1

今天我試圖打印一個集合的元素,它進入了一個無限循環。 當我試圖獲取集的大小,它返回我正確的值是8std :: set的迭代不會結束

代碼就像它上面獲取大小之前宣佈這個

 std::cout << "size of set is " << myset.size(); 
    for(it=myset.begin();it!=myset.end();it++) 
    std::cout << "value is : " << *it; 

迭代器。其中一個有趣的事實是,打印時,其中一個預期的元素從設置中丟失。

我知道我會對你生氣或犯一些愚蠢的錯誤,但我擔心的是,它是 myset.end()指向一些隨機的地方嗎?但是,即使如此,爲什麼是它衍生自組的元素,同時印刷,而不是崩潰

+5

問題在於你沒有向我們展示的代碼。 – 2012-01-12 17:59:11

+0

我的擔心是可以結束()函數去haywire ...我從來沒有見過它 第二件事是爲什麼它給大小爲8,我有for循環正好在我打印大小的語句下面。它怎麼會發生這樣的錯誤? – Invictus 2012-01-12 18:03:22

+0

請發佈一個*完整的*,*最小*示例程序,以顯示您的錯誤。一個* complete *程序是我們可以複製粘貼和編譯的程序。一個*最小*程序不包含與您的問題無關的行。我知道製作一個似乎很難,但它很有價值。我們將能夠更好地解決您的問題。另外,您可以在生產最小樣本時自行解決。請參閱http://sscce.org/。 – 2012-01-12 18:11:35

回答

1

所有STL容器指向容器的一個過去的最末端返回的.end()迭代器,並取消引用它(*iterator)結果未定義的行爲。

您的for循環不會解除引用.end()雖然它會在您的迭代器等於.end()時停止,因此這不應該成爲您發佈的代碼中的問題。您之前可能在其他代碼中犯了不同的錯誤。

+0

是的,它會導致分段錯誤。但我的情況是不同的。我沒有得到任何錯誤,除了它無限循環無限大小顯示爲8 :( – Invictus 2012-01-12 18:06:34

+0

你已經發布的循環不會顯示大小,你的尺寸線在循環之上。發佈你的真實代碼,所以我們可以找到真正的錯誤:) – 2012-01-12 18:07:28

+0

耶循環將只打印設置中的元素。由於它進入了有限循環,我打印了大小以檢查顯示的大小是多少。實際的代碼是冗長的,並且是一個保密的代碼,我猜這很難讓我在這裏複製 – Invictus 2012-01-12 18:10:33

相關問題