我已經在這個網站上看到了一些解決方案,但沒有一個解決了我的問題。 我正在實現一個n-children,非平衡樹型和add操作給我一個例外。 的代碼如下:C++免費堆塊3da9e0在3daa08修改後被釋放
struct Node {
// Just to initialize the parent node to zero, default constructor
Node(Node *parent = 0) : m_parent(parent) {
}
Node *m_parent;
vector<Node *> m_children;
GameBoard m_currentBoard;
};
當錯誤發生的事情:
Node *tempNode = 0;
// Going through each of them to create new nodes
for (unsigned int i = 0; i < availableBoards.size() ; i++) {
// Create a new node
tempNode = new Node;
tempNode->m_parent = curNode;
tempNode->m_currentBoard.setBoard(availableBoards[i]);
// This is the line when program crashes
curNode->m_children.push_back(tempNode);
}
我也曾嘗試宣告循環內的tempNode,但它並沒有幫助。
我已經通過Visual Studio的手錶檢查過,curNode
不是NULL也不是tempNode
。
爲什麼我會收到此錯誤?
感謝您的回答。
你確定'curNode'是否有效(非null並不意味着有效)?它似乎已被釋放 – UmNyobe
是的,我已經雙重檢查它,我通過參數傳遞它。只有它的父項字段爲空(根節點),但子項向量的大小爲0. –
「存在」並不意味着有效性。釋放內存會將舊數據保留在原來的位置,因此在調試器中它仍然看起來「有效」。 – molbdnilo