я получаю сообщение об ошибке, когда первый вызов recursice сделана ошибка:с ++ Двоичный поиск по рекурсии
Unhandled exception at 0x002A2E44 in rekBinSearch.exe: 0xC0000005: Access violation reading location 0x0000000A.
Это вызвано:
if ((*pEnd - pBegin) == 0) / There's only one element */
Кажется, что, когда я установить новый начальный и конечный адрес, я делаю что-то неправильно, потому что они не могут быть прочитаны при рекурсивном вызове. Они «установить» по:
find(x, (int*)pBegin, pMid);
Полный код:
bool find(const int x, const int* pBegin, const int* pEnd)
{
if ((*pEnd - *pBegin) == 0) /* There's only one element */
{
if (x == (int)pEnd) /* That element could be the correct one */
return true;
else /* If it is not then return false, x is not in the array */
return false;
}
int *pMid = (int*)(pEnd - pBegin); /* pMid should be the adress to the element in the middle of the array */
if (x >= (int)pMid) /* If x is in array it is to the right of the middle */
find(x, (int*)pMid, pEnd);
else /* If x is in array it is to the left of the middle */
find(x, (int*)pBegin, pMid);
}// find
Что я делаю неправильно или как я думаю неправильно? Спасибо, я заранее.
Избавьтесь от всех этих бросков, и вы будете на полпути к решению проблемы, я подозреваю. – davmac
'(pEnd - pBegin)' не вычисляет среднюю точку, а число элементов между указателями. Возможно, есть элементы 0x0A? –
Идиоматическое использование итератора, такого как синтаксис, заключается в том, чтобы рассматривать равенство начала и окончания, указывая на пустой интервал. Ваша функция не обнаруживает передачу пустого массива. – jxh