HW3.exe中0x012351CF处的未处理异常:0xC0000005:访问冲突读取位置0x00000004

时间:2017-09-28 13:48:17

标签: c binary-search-tree

我已经完成了一个(ADT)二元shearch树的实现,我必须做一个函数来计算父子的数量,这些父母的儿子差异小于5。该计划有效,只有这个功能失败。

返回' (递归)我有一个断点。

int difference(BSTNode *root, comperFunc cmpFn, comperFunc lesserThenFive)
{
    int count = 0;
    if (root)
    {
        count = 0;
        if (root->Left && root->Right)
        {
            //if root->Right > root->Left
            if (cmpFn(root->Right->key, root->Left->key) == 1)
            {
                if (lesserThenFive(root->Right->key, root->Left->key))
                     count = 1;  
            }
            //if root->Right < root->Left
            if (cmpFn(root->Right->key, root->Left->key) == -1)
            {
                if (lesserThenFive(root->Left->key, root->Right->key))
                    count = 1;    
            }
       }
   }
   return difference(root->Left, cmpFn, lesserThenFive) + difference(root- >Right, cmpFn, lesserThenFive) + count;//here is the break point

}

1 个答案:

答案 0 :(得分:1)

return语句中,如果输入difference并且root为空,则将取消引用空指针。

该返回需要在if块中,并且您需要在else部分返回一些可变值。

扩大一点。您的算法recursivley使用当前difference的左右节点调用root,但最终root->leftroot->right中的一个将成为NULL。然后,您的return语句将有效地尝试使用NULL的左侧或右侧成员调用difference,例如NULL->left。这将在任何现代操作系统上产生错误。