二进制搜索树创建堆栈溢出

时间:2014-09-25 00:08:59

标签: c++ visual-studio-2010 binary-search-tree

程序尝试添加数字时,我收到堆栈溢出。它似乎正在访问一个不存在的二叉搜索树。这是错误代码: CIS 350中的0x01084DD9处的未处理异常问题2.exe:0xC0000005:访问冲突读取位置0xCDCDCDD5。 有人可以帮忙吗?提前致谢!

#include <iostream>
#include <algorithm>  // for permutations
using namespace std;

struct BST
{
    BST* left;
    BST* right;
    int d;

    BST(int data)
    {
        d = data;
        BST* left;
        BST* right;
        cout << d << endl;
    }
    void add(int data)
    {
        cout << d << "    |   " << data << endl;
        if (d < data){
            if (right == NULL){
                right = new BST(data);
            }
            else{
                right->add(data);
            }
        }
        else{
            if (left == NULL){
                left = new BST(data);
            }
            else{
                left->add(data);
            }
        }
     }
   }
int main()
{
    BST* test1 = new BST(12);
    test1->add(14);

    system("pause");
    return 0;
}

1 个答案:

答案 0 :(得分:0)

正如AlexD在评论中所指出的,分段错误源于struct BST成员leftright未初始化为NULL的事实。

请注意,这是由错误暗示的,表示&#34;访问冲突读取位置0xCDCDCDD5&#34;。位置0xCDCDCDCD,当使用Microsoft C ++运行时库时,它是一个标记未初始化内存的幻数。

位置0xCDCDCDD5(来自0xCDCDCDCD的8字节偏移)出现,因为代码left->add(data)尝试在成员left->d中写入(距left指向的位置偏移8个字节)。