使用按顺序遍历成员函数时引发异常(堆栈溢出)的问题
Posted
技术标签:
【中文标题】使用按顺序遍历成员函数时引发异常(堆栈溢出)的问题【英文标题】:Having an issue with an exception (Stack overflow) being thrown when using an In Order traversal member function 【发布时间】:2019-08-07 19:22:48 【问题描述】:我正在尝试在二叉搜索树上测试我的递归按顺序遍历函数,但是当我调用该特定函数以显示树上的节点时,我不断抛出异常(堆栈溢出)。我错过了代码的关键部分吗?
我尝试在其他地方查找如何处理异常,但到目前为止没有任何效果。我还将函数更改为 const
,因为我不确定编译器 (Visual Studio 2017) 是否想要这样做。我已经测试了 Pre-Order 和 Post-Order 遍历函数,并且都按预期工作。
按顺序遍历函数是另一个类的私有成员函数,由一个单独的公共函数调用,该函数简单地将树的root
传递给displayInOrder
。
void displayInOrder(TreeNode *&root) const
if (root == NULL)
return;
else if (root)
displayInOrder(root);
cout << root->value << " ";
displayInOrder(root->right);
在二叉树 Application.exe 中的 0x00C22FE9 处引发异常: 0xC0000005:访问冲突写入位置0x00CA0F60。
【问题讨论】:
当 *** 上的问题是关于堆栈溢出时,我总是觉得很有趣。 哈哈,我也是这么想的!else if (root)
-- 您已经测试过root
是否为 NULL。不需要else if (root)
【参考方案1】:
displayInOrder(root);
应该是
displayInOrder(root->left);
第一个版本是无限递归的,因为您使用完全相同的参数调用相同的函数。如您所见,这会导致堆栈溢出。
【讨论】:
哇,成功了!我不敢相信我错过了!你是上帝派来的! @ChristianDominguez 如果这是 Visual Studio,则在引发异常时查看堆栈帧。这会告诉你很多。 注明。谢谢你的提示! @drescherjm以上是关于使用按顺序遍历成员函数时引发异常(堆栈溢出)的问题的主要内容,如果未能解决你的问题,请参考以下文章
使用 dynamic_pointer_cast 时出现异常 0xC0000409(堆栈缓冲区溢出)[关闭]