C ++ Free Heap块3da9e0在被释放后在3daa08处被修改

时间:2014-01-22 13:06:24

标签: c++ tree heap

我在这个网站上看到了一些解决方案,但没有一个解决了我的问题。 我正在实现一个n-children,非平衡树类型,add操作给了我一个例外。 代码如下:

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

为什么我收到此错误?

感谢您的回答。

1 个答案:

答案 0 :(得分:0)

确定问题是在调用它之前就破坏了运行第二个代码段的对象。它如下所示:

class A{
     int *getAsdf();
     int *asdf;
}

int main() {
    A *newObj = new A;
    delete newObj;
    newObj->getAsdf();
}

关于如何从之前删除的对象调用方法,我没有一个线索。在像getAsdf这样的函数内部发生错误,甚至参数都是有效的。可以解释一下吗?