2013-08-03 245 views
1

我已經寫了下面的功能自定義搜索功能,它需要一個「塊」作爲參數,在塊的「LRU」列表中的「塊」的搜索。這裏「塊」是類「塊」的一個實例。以下是「LRU」的宣言:工作不正常

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

編譯器應該已經向您沿着線的東西:「*警告:在函數沒有返回語句,返回非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