int find_pos(int item, int a[], int len)
次のように機能する関数を作成しようとしています。
t
の であるキーの配列のインデックスを返します。存在する場合は、そうでなければ return を返しsuccessor
ます。k
KEY_NOT_FOUND
Keyt
は の後継でありk
、がそのような にt
格納されている最小のキーです。sda->buffer
t >= k
const int KEY_NOT_FOUND = -1;
int find_pos(int item, int a[], int len) {
int low = 0;
int high = len-1;
if (a[0] >= item && len == 1) {
return 0;
}
if(a[0] < item && len == 1) {
return KEY_NOT_FOUND;
}
while (low <= high) {
int mid = low + (high - low) / 2;
if (a[mid] == item) {
return mid;
} else if (a[mid] < item) {
low = mid + 1;
} else {
high = mid - 1;
}
if(a[high] < item) {// invalid size read of 4
return high + 1;
}
}
return KEY_NOT_FOUND;
}
ただし、無効な読み取りサイズ 4 の読み取りが発生する可能性があります。
if(a[high] < item)
この行が無効な読み取りサイズ 4 の読み取りを引き起こす理由を誰かが説明 (または例を挙げて) できますか? 前もって感謝します。