1

可能重复:
在 Visual Studio C++ 中,内存分配表示形式是什么?

对不起标题,但我真的不知道我如何处理这个“价值=???”

得到一个带有 treeIterator 的简单二叉树。迭代器可以使用 ++ 或 -- 上下移动

它包含一个值和一个键以及根节点、左节点、右节点。

如果我在树上启动迭代器

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

迭代器调用 begin()

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

调用 findFirst()

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

好吧,如果树包含很多值。现在我清除树,打印出计数并尝试启动一个迭代器来查看是否有项目显示它们,无论如何......

尝试调试显示迭代器进入可能为空的树并查找元素。他从树中得到根节点,这是一个零节点,取左边的节点(也是一个零节点)并在左边的节点上运行 findFirst。

到这里,根(零节点)的左节点(零节点)没有左节点。

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

所以我有默认构造函数,它将所有节点设置为零节点(我需要这个吗?它总是默认构造函数,对吗?)

最后,我的问题是我该如何处理这个问题?也许抓住一个例外?整个事情在内存 xxx 处引发了一个未处理的异常

感谢您的回答

4

2 回答 2

4

谷歌查询没有结果

在查询中键入“0xfeeefeee”。第一和第三击非常好。我将复制第三次命中中显示的表,它显示了调试分配器写入堆的神奇值:

在此处输入图像描述

请注意 0xFEEEFEEE 值如何出现在“HeapFree() 之后”列中。它告诉您代码有什么问题,它是在 free() 或 delete 运算符释放后访问内存。非常经典的指针错误。

于 2012-11-23T12:35:30.113 回答
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;
}

但是,如果“Hans Passant”是对的(下)

您缺少几个 E,它是 0xFEEEFEEE。feefee 是一个出色的调试诊断工具,只需在谷歌查询中输入即可。——汉斯·帕桑特

那么错误可能在其他地方......

于 2012-11-22T23:33:53.290 回答