2013-09-15 2 views
-1
void binarysearch(string key, vector<string>& f2){ 
sort_vector(f2); 

int mid = 0; 
int left = 0; 
int right = f2.size(); 
bool found = false; 
while (left < right){ 
    mid = left + (left+right)/2; 
    if (key > f2[mid]){ 
     left = mid + 1; 
    } 
    else if(key < f2[mid]){ 
     right = mid; 
    } 
    else{ 
     found = true; 
     left = right; 
    } 
} 
cout << "out of while loop" << endl; 
if (found == true){ 
    cout << "YES: " << key << endl; 
} 
else{ 
    cout << " NO: " << key << endl; 
} 
found = false; 
} 

Когда я запустил это, он автоматически завершается и говорит «ошибка сегментации» без номера строки. Что это значит, и почему я получаю эту ошибку?«Дефект сегментации» во время выполнения

Заранее спасибо

+1

'станд :: binary_search' уже доступно – P0W

+1

Вы должны ** узнать, как использовать отладчик **. Поэтому включите информацию об отладке и все предупреждения путем компиляции с помощью 'g ++ -Wall -g' и используйте отладчик' gdb' .... (по крайней мере, в Linux) –

+0

Пожалуйста, предоставьте ввод, в котором он сбой. – Nikhil

ответ

5

Ошибка сегментации означает программу доступ к неверному адресу памяти. Я подозреваю, что в данном случае это тот факт, что это:

mid = left + (left+right)/2; 

ведет к значению середины, что это больше, чем право на какой-то момент (так как это фактически то же самое, как mid = 1.5 * left + 0.5 * right). Оно должно быть таким:

mid = left + (right - left)/2; 

Или, еще лучше (если сумма левый + правый не превышает MaxInt), а mawia предлагает:

mid = (left + right)/2; 
Смежные вопросы