私はThomas H. CormenによってAlgorithms Unlockedを読んでいましたが、私はセンチネル線形検索のアルゴリズムに遭遇しましたが、少し違った方法で書きました。このコードは動作しますが、私は私のものではないメモリにアクセスしているので、アプローチが間違っているかどうかを知りたがっていますか?これは、センチネルリニア検索には間違ったアプローチですか?
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;
}
5の配列を渡すと、 'a [5]'は範囲外のアクセスです。だから、もしそれが大丈夫かどうかを尋ねるなら、あなたはすでに答えを知っているか、あなたは聞かないでしょう。 – StoryTeller
@Doctor EI:あなたの配列に含まれていないメモリにアクセスしているので、そのようなコードは無効です。つまり、この点を分かれば、 'lsearch'を呼び出すクライアントがおそらく望みません、あるいは期待していない配列を変更しているときにあなたの懸念が正当だと言います。 –