2013-08-03 4 views
1

Я написал следующую функцию, она принимает «блок» в качестве аргумента, ищет «блок» в списке блоков «lru». Здесь «block» - это экземпляр класса «Block». Ниже приводится декларация «НДИ»:Функция пользовательского поиска не работает должным образом

list<Block> lru; 

И следующий моя функция поиска:

int LRU::searchLRU(Block block) 
{ 
    if (lru.size() == 0) 
    { 
     lru.push_back(block); 
     return 1; 
    } 

    list<Block>::iterator i; 

    for (i = lru.begin(); i != lru.end(); i++)    
    { 
     if (i->get_set() == block.get_set() && i->get_index() == block.get_index()) 
     { 
      lru.push_back(block); 
      lru.erase(i); 
      return 2; 
     } 
    } 

    if (lru.size() == size) 
    { 
     lru.pop_front(); 
     lru.push_back(block); 
     return 3; 
    } 
} 

Но проблема иногда функция возвращает «0». И в результате моя общая программа работает неправильно. Я чувствую, что справился со всеми делами.

Может ли кто-нибудь указать на ошибку или почему функция возвращает «0».

+0

Компилятор должен был предоставить вам что-то в следующих строках: «* warning: no return statement в функции, возвращающей не-void *» Если вы не отключили предупреждения. –

ответ

2

Первый, если охватывает пустой случай списка, последний, если охватывает полный список дел, средний для цикла охватывает не пустой не полный список, но если вы не найдете блок, вы не вернетесь от него, если он не является ни полным, ни пустым, вы вернетесь 0, отступив от конца функции. Если бы не было ясно, я попытаюсь перефразировать:

empty list -> add item, return 0 
full list -> pos item, add item, return 3 
partially full list -> find item, *if found* {erase item, add item, return 2} 

Проблема при обнаружении, если вы не найдете его, вы ничего не делать. Вы упадете с конца (и что возвращает 0 в главном, иначе UB, see here).

+0

Я получаю вашу точку, большое спасибо за помощь! :) – nish

+0

Я думал, что было бы неопределенным поведением, что функция вернула, если функция не смогла что-то вернуть. – FDinoff

+0

@FDinoff Исправлено, добавлено разъяснение + источник. – Borgleader

Смежные вопросы