为什么这个递归例程给出了EXC_BAD_ACCESS(code = 1,address = 0x8)?

时间:2015-10-23 16:04:49

标签: c++ xcode pointers recursion

void BinTree::arrayToBSTreeHelper(NodeData* toRead[], Node* current, int low, int high) // ******
{
    if (low >= high)
    {
        return;
    }

    int midPoint = (low + high) / 2;

    cout << "low, midPoint, and high at entry to helper: " << low << "  " << midPoint << "  " << high << endl; // ****** prints 0, 6 and 13

    insert(toRead[midPoint]); // ****** insert takes a NodeData*
    arrayToBSTreeHelper(toRead, current->left, low, midPoint); // ERROR
    arrayToBSTreeHelper(toRead, current->right, midPoint + 1, high);
}

低,midPoint和high的打印输出发生一次,然后在第一次递归调用时给出“错误访问”消息。 “插入”已经过测试,似乎工作正常。

以递归方式传递NodeData *的数组“toRead”似乎有问题,但我无法弄清楚它是什么。

环境是Xcode 7.1。

1 个答案:

答案 0 :(得分:1)

  

传递数组“toRead”似乎有问题   NodeData *递归

这是不正确的。

当({因为)current为零时失败。

如果您认为某些设计使current在此时可靠地不为零,则需要修复该设计错误。因为我们可以看到 IS 为零。

如果设计的其他部分不应该保证此时current指向有效对象,那么您展示的代码应该在使用之前对其进行测试。