我正在阅读由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;
}
答案 0 :(得分:0)
您正在设置您不拥有的内存位置的值。你正在覆盖阵列分配的内存之后的内存(这是一个超出界限的访问)。 您的程序可能会运行,但它在概念上是错误的(并且取决于编译器和安全检查,可能在其他情况下不起作用)
答案 1 :(得分:0)
如果为a
参数传入的参数少于6个元素,则访问a[5]
是未定义的行为,并且在许多情况下会导致问题。鉴于a
的声明,我假设您使用5元素数组调用函数,因此代码错误。
如果参数有6个或更多元素,代码将起作用。但在那种情况下:
int a[5]
具有误导性。