对于哨兵线性搜索,这是一种错误的方法吗?

时间:2017-10-29 15:18:11

标签: c++ algorithm

我正在阅读由Thomas H. Cormen解锁的算法,我遇到了一个用于哨兵线性搜索的算法,但我用稍微不同的方式编写了它。虽然这段代码也有效,但我想知道方法是否错误,因为我正在访问不属于我的内存?

CODE:

int lsearch (int a[5], int n) {

    int i = 0;

    a[5] = n;

    while (a[i] != n)
        i ++;

    if (i == 5)
        return -1;

    return i;
}

2 个答案:

答案 0 :(得分:0)

您正在设置您不拥有的内存位置的值。你正在覆盖阵列分配的内存之后的内存(这是一个超出界限的访问)。 您的程序可能会运行,但它在概念上是错误的(并且取决于编译器和安全检查,可能在其他情况下不起作用)

答案 1 :(得分:0)

如果为a参数传入的参数少于6个元素,则访问a[5]是未定义的行为,并且在许多情况下会导致问题。鉴于a的声明,我假设您使用5元素数组调用函数,因此代码错误。

如果参数有6个或更多元素,代码将起作用。但在那种情况下:

  1. 参数声明为int a[5]具有误导性。
  2. 调用者可以使用修改输入数组的搜索功能。