这是哨兵线性搜索的错误方法吗?
Is this a wrong approach for sentinel linear search?
我正在阅读Thomas H. Cormen的Algorithms Unlocked,我遇到了一种哨兵线性搜索的算法,但我以略有不同的方式编写它。虽然这段代码也有效,但我想知道方法是否错误,因为我正在访问不属于我的内存?
法典:
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;
}
您正在设置不属于您的内存位置的值。您正在覆盖位于阵列分配内存之后的内存(这是越界访问)。您的程序可能会运行,但它在概念上是错误的(并且取决于编译器和安全检查,在其他情况下可能无法工作)
如果为 a
参数传入的参数少于 6 个元素,则访问a[5]
是未定义的行为,在许多情况下会导致问题。给定 a
的声明,我假设您使用 5 元素数组调用函数,因此代码是错误的。
如果参数有 6 个或更多元素,则代码将起作用。但在这种情况下:
- 参数声明为
int a[5]
具有误导性。 - 具有修改输入数组的搜索函数可能会被调用者意外。
相关文章:
- C++:正在检查LinkedList中的回文-递归方法-错误
- C++数组队列实现方法错误
- 方法错误"not all control paths return a value"和方法不返回值
- OpenGL 顶点缓冲区类重定义和模板方法错误
- 如何在 VC++ 中通过引用传递另一个对象的方法(错误 C2664)
- 复数程序编译时的计算方法错误
- CMake 构建错误 - 虚拟方法错误缺少 vtable
- 接受 lambda 作为参数的类方法 - 错误消息
- c++程序方法错误visualstudio
- OpenCV "findContours"方法错误
- std::线程类方法错误
- 基类没有新方法错误
- C++派生类继承方法错误
- 指向类方法错误c++11的指针数组
- 使用jni调用方法:错误的jni oop参数
- QVector.push_back方法错误
- 对静态方法错误的未定义引用
- Friend方法错误
- async_write方法错误
- 重写方法错误C++