递归函数在C++中的崩溃

递归函数在C++中的崩溃,c++,pointers,recursion,binary-tree,C++,Pointers,Recursion,Binary Tree,在尝试调用一个简单的程序来测试我查找第一个小于作为参数给定的节点的方法后: BinaryTreeMap <int, int> m; m[5] = 5; m[3] = 3; m[8] = 8; m[1] = 1; m[2] = 2; m[6] = 6; cout << m.firstSmaller(5) << " "; cout<< m.firstSmaller(6); cout << " " << m.firstSmalle

在尝试调用一个简单的程序来测试我查找第一个小于作为参数给定的节点的方法后:

BinaryTreeMap <int, int> m;
m[5] = 5;
m[3] = 3;
m[8] = 8;
m[1] = 1;
m[2] = 2;
m[6] = 6;
cout << m.firstSmaller(5) << " ";
cout<< m.firstSmaller(6);
cout << " " << m.firstSmaller(3) << " ";
cout << m.firstSmaller(12);
我不明白它为什么会崩溃。如果你们能帮助我理解,我将非常感激,因为这将有助于我进一步了解编程。
抱歉,如果解释得不好,那就是习惯了C++中的英语词汇,而不是我的母语

似乎您已反转了两行代码。尝试:

BSNode* functionforFirstSmaller(BSNode *c, TypeKey k)
{
    if (c == 0) return 0;
    if (c->left == 0 && c->right == 0) return c;
    if (c->key >= k) return functionforFirstSmaller(c->left, k);
    BSNode *cvor = functionforFirstSmaller(c->right, k);
    return cvor;
}

First中的根是什么?根是整个二叉树的根。如果我要查找的键比它小,它应该在左子树中。请尝试在递归函数中打印一些输出。它将帮助您确定故障发生的时间是否可能是c==0?因为它是指针,所以我觉得很奇怪。pom==0也是一样,当c=3,然后试图调用functionforFirstSmaller3->right,k,3->right实际上是空的,但是,我没有在前两个ifs中处理这个问题吗?仍然崩溃,但是谢谢你的回答。我相信我在尝试获取空指针时犯了一些错误。一定是这样。我现在就去修。
BSNode* functionforFirstSmaller(BSNode *c, TypeKey k)
{
    if(c->left == 0 && c->right == 0) return c;
    if(c == 0) return 0;
    if(c->key >= k) return functionforFirstSmaller(c->left, k);
    BSNode *cvor = functionforFirstSmaller(c->right, k);
    //if(cvor == 0) return 0;
    return cvor;
}
BSNode* functionforFirstSmaller(BSNode *c, TypeKey k)
{
    if (c == 0) return 0;
    if (c->left == 0 && c->right == 0) return c;
    if (c->key >= k) return functionforFirstSmaller(c->left, k);
    BSNode *cvor = functionforFirstSmaller(c->right, k);
    return cvor;
}