我故意在此代码中创建错误且不平衡的二叉树:
void createlist (tree*& node) {
node = new tree;
node->num = 1;
node->left = new tree;
node->left ->num = 2;
node->right = new tree;
node->right->num = 3;
node->left->left = new tree;
node->left->left->num = 4;
node->left->right = new tree;
node->left->right->num = 5;
node->right->left = new tree;
node->right->left->num = 6;
node->left->left->left = new tree;
node->left->left->left->num = 7;
}
然后,当我尝试使用普通函数对此进行打印时:
void print (tree* node) {
if (node!= 0) {
print (node->left);
cout << node->num << " ";
print (node->right);
}
}
它抛出一个错误:
Access violation reading location 0xcdcdcdd5.
在此位置:
print (node->left);
我只是从树开始,并不完全了解此错误的原因。你能帮忙吗?
最佳答案
这是您学习如何调试程序的绝好机会。我建议您在调试器中运行该程序,看看发生段故障时node和node-> left的值是什么。
access violation是当您访问不允许您的程序访问的内存时。
您的问题不是树木,您的问题是正确使用pointers且未正确初始化变量。
我怀疑您的问题是树的constructor不能正确执行:
left = NULL;
right = NULL;
请记住,在C / C ++中,编译器在创建变量时不会将任何特定值设置为变量,而是由您来初始化变量。
通常使用NULL(或C ++ 11中的nullptr)来测试/设置指针而不是使用0。
Link to C++ pointers tutorial