2013-10-31 54 views
0

我是編程新手,所以即使在嘗試谷歌這個錯誤後,我找不到任何與我的項目相關的東西,或者足夠簡單, 。munmap_chunk():無效指針:遞歸函數中的0x00007fffbef49d90

我必須做一個迭代地反轉字符串的函數,然後遞歸地做另一個函數。迭代函數工作得很好:

string reverse(string str_input) { 
    string result = ""; //initialize a blank string to hold reversed string 
    for(int i = (str_input.length() - 1); i >= 0; i--) { 
      result += str_input.substr(i,1); //concatenates the string backwards 
    } 

    return result; 

但是,當我試圖讓它遞歸時,我得到了一個無效的指針錯誤。我已經複製了我用於測試的main和這裏的其他函數: string reverse_rec(string str_input,string result,int input_length);

int main() { 

    string str_input = "hello"; 
    int input_length = (str_input.length() - 1); 
    string result = ""; 

    cout<< reverse_rec(str_input, result, input_length) << endl; 

    return 0; 

} 

string reverse_rec(string str_input, string result, int input_length) { 
    if(input_length <= 0) { 
      return result; 
    } else { 
      reverse_rec(str_input, result += str_input.substr(input_length,1), --input_length); 
    } 
} 

有沒有人有任何提示,以什麼可能會導致此錯誤?從我讀過的內容來看,大多數人在嘗試刪除東西時遇到了這個錯誤,但我似乎並沒有在這個程序中刪除任何內容......

注意:我們必須通過連接子串而不是使用數組,因爲我們尚未深入討論數組。

+0

從我可以告訴,這不會工作。您試圖在原地修改字符串。看着其他的實現,他們要麼使用迭代器或指針算術。考慮重新考慮你的方法。 – 2013-10-31 02:38:03

回答

1

你忘記返回:

 reverse_rec(str_input, result += str_input.substr(input_length,1), --input_length); 
    ^^^^^ 

這樣的錯誤可以被編譯器容易被發現。你應該啓用警告。