mid = high + low;
guess = arr[mid];
Первая очевидная ошибка здесь: сумму надо бы разделить пополам.
else if (guess < item)
low = mid - 1;
Вторая очевидная ошибка здесь: mid может быть равен 0, а значит low может вылезти за пределы массива снизу.
С условием выхода из цикла поиска при отсутствии искомого значения в массиве тоже не всё ОК.
int arr[length];
Если length = 2147483647, то программа вообще отказывается работать.
Ты пытаешься разместить массив размером 8ГБ на стеке. Как видишь, это не очень хорошая идея.