【发布时间】:2015-03-01 15:26:42
【问题描述】:
以下代码在 Linux 上运行,但在 Windows 上崩溃:
#include <iostream>
struct Node
{
Node()
:data_(0), left_(nullptr), right_(nullptr)
{ }
int data_;
Node* left_, *right_;
};
struct Tree
{
Node* root_;
~Tree()
{
release(root_);
}
void release(Node* node)
{
if (node)
{
release(node->left_);
release(node->right_);
delete(node);
}
}
};
int main()
{
{
auto tree = Tree();
}
std::cout << "exit\n";
return 0;
}
在使用 g++ 4.82 的 Ubuntu 14.04 LTS 上的输出:
退出
使用 Visual Studio 2013 在 Windows 8 上崩溃,抱怨如下:
访问冲突读取位置0xCCCCCCD0。
0x009A5CCC 处未处理的异常:0xC0000005:访问冲突读取位置 0xCCCCCCD0。
如何理解这个问题?如何解决?
【问题讨论】:
-
你应该使用
std::unique_ptr<Node>而不是Node*