2012-11-22 19 views
1

可能重複:
In Visual Studio C++, what are the memory allocation representations?存儲器存取例外,在閱讀, 「0xFEEFEE {值= ???}」

很抱歉的冠軍,但我真的不知道我該如何處理這「值= ???」

用treeIterator得到了一個簡單的二叉樹。迭代器可以使用++或 -

它包含一個值和一個鍵也是根節點,左節點,右節點。

如果我開始一個迭代器上樹

for (Map::TreeIterator i=tree.begin(); i != tree.end(); i++) { 
    std::cout << i.key() << ": " << i.value() << std::endl; 
} 

迭代器調用開始()

TreeIterator Tree::begin() { 
    return TreeIterator(m_root->findFirst()); 
} 

調用的FindFirst()

TreeNode* TreeNode::findFirst() { 
    if (m_left != NULL) { 
     return m_left->findFirst(); 
    } else { 
     return this; 
    } 
} 

所有,如果右邊的樹包含很多值。 現在我清除樹,打印出Count並嘗試啓動一個迭代器以查看是否有項顯示它們,反正...

嘗試調試顯示迭代器進入可用空樹並查找元素。他從樹中獲得根節點,這是一個零節點,取左節點(也是一個零節點)並在左節點上運行findFirst。

在這裏,我們去,根(零節點)的左節點(零節點)沒有左節點。

m_left=??? m_right=??? m_up=??? 

,所以我有默認的構造器,這將設置所有節點到零節點(我應該需要這個?這是永諾默認的構造器,對吧?)

Finaly,我的問題是,我該如何處理這個問題?也許發現異常?整個事情記憶XXX拋出一個未處理的異常

感謝答案

+1

顯示您的所有相關代碼。 –

+1

您錯過了幾個E,它是0xFEEEFEEE。 feefee是一個出色的調試診斷,只需在谷歌查詢中輸入。 –

+0

谷歌查詢沒有結果...或者我不知道我應該輸入哪個查詢...不同時間C++,內存異常讀取,s.o.沒有反應的查詢如果鍵入的東西像= ???或值= ??? –

回答

0

是否有可能爲m_root爲空在下面的代碼?

TreeIterator Tree::begin() { 
    return TreeIterator(m_root->findFirst()); 
} 

如果是這樣嘗試

TreeIterator Tree::begin() { 
    if (m_root != NULL) 
     return TreeIterator(m_root->findFirst()); 
    else 
     return TreeIterator::end; 
} 

然而,如果 「漢斯帕桑特」 是正確的(如下圖)

你缺少一對夫婦鄂氏的,它是0xFEEEFEEE。 feefee是一個出色的調試診斷,只需在谷歌查詢中輸入。 - Hans Passant

那麼錯誤可能在別處...

+0

參見http://stackoverflow.com/questions/127386 – msandiford

3

谷歌查詢沒有結果

類型 「0xfeeefeee」 查詢。第一和第三擊非常好。我會複製在3rd hit所示的表,它顯示了魔法值的調試分配器寫入堆:

enter image description here

注意0xFEEEFEEE值是如何出現在「後HeapFree()」一欄。它告訴你代碼有什麼問題,它是在free()或delete操作符釋放後訪問內存的。漂亮的經典指針錯誤。