2015-06-25 47 views
2

我下面的程序是給我一個out_of_range例外。out_of_range例外:::擦除

bool myProg(char* value, int length, long& num) 
{ 
    string s; 
    char tmp; 
    bool retVal = true; 
    s.assign((const char*)value, length); 
    s.erase(remove(s.begin(),s.end(),' '),s.end()); 

    ... 
    // modify s characters 

    std::size_t found = s.rfind('F'); 
    if (found!=std::string::npos) 
      s.erase(found,1); 

    ... 
    // work on num variable 

    return true; 
} 

我在谷歌檢查了所有的功能,發現異常可以通過erase僅拋出,當位置erase功能也通過僅是無效的。

我找不到什麼輸入字符串可能會導致異常,因爲我跑了它幾年我的琴絃和程序在我所有的測試用例工作正常。

注意,程序不能被現在&修改重新部署,包括嘗試捕捉捕獲輸入變量,並檢查他們。所以我堅持只看代碼。

+1

將該參數共享用於觸發異常可能是有益的。 –

+1

請完整的測試用例。 – user657267

+0

我們不知道調用者傳遞了什麼參數。我們只知道發生了異常。 – MAG

回答

0

首先嚐試

std::size_t found = s.rfind('F'); 

要麼改變此語句

auto found = s.rfind('F'); 

std::string::size_type found = s.rfind('F'); 

而且檢查length不超過std::strlen(value)

另外這看起來logjcally不一致:引入可變retVal的意義是什麼?

bool retVal = true; 
//... 
return true;