2012-04-22 132 views
0

第一次嘗試調用that-> getValue()看起來不錯,但只是下面一行(while循環的頭部)給我getValue方法內部的錯誤「訪問衝突」。C++調用兩次導致訪問衝突

if(first != 0){ 
    listElement *that = first;  

    cout << "add: " << that->getValue() << " | " << value << endl; 

    while(that->getValue() < value) {..} 
} 

我是否在通話過程中編輯值? get方法只包含的「返回值」 ....

+3

沒有足夠的信息:'getValue'裏面有什麼? 'while'循環體內部發生了什麼? – Vlad 2012-04-22 13:09:47

+0

需要所有的代碼。附:如果你說的是真的,'while'是無盡的 – 2012-04-22 13:11:59

+0

任何你不使用智能指針的原因? – 2012-04-22 14:57:26

回答

4

顯而易見的解釋是,在這個代碼

while(that->getValue() < value) {..} 

{..}你正在做that = that->next;,並設置that空指針。

您需要在while循環中爲that != NULL添加測試,以防止在未找到符合搜索條件的項目時到達列表末尾。

while(that != NULL && that->getValue() < value) 

,如果你已經囊括了所有的代碼,因爲它似乎是代碼的關鍵位處於{..}塊它會幫助!

+1

嘿,你能借我你的水晶球嗎? – Vlad 2012-04-22 13:12:59

+1

@Vlad在代碼中我們看到了'listElement','first'和'while',這是鏈表迭代的所有特徵。 – 2012-04-22 13:14:38

+0

好吧,你是對的我在while循環中調用next()。我通過設置「第一個」變量將下一個指針設置爲0來解決這個問題。但是我仍然不明白爲什麼它會在while循環的頭部導致錯誤,它是否是循環,對我來說顯然是這樣。但是在這種情況下,while循環標題應該在下一次被調用之前解決 – user972851 2012-04-22 13:24:25