2015-10-05 158 views
1

我已經做了一個函數,應該在一個給定的基礎上添加兩個數字,表示爲字符串在一起。引用的反向字符串方法反轉了一個字符串並正常工作。但是,每當我嘗試調用此方法時,都會收到以下錯誤消息。 0 [main] proj02 7364 cygwin_exception :: open_stackdumpfile:將堆棧跟蹤轉儲到proj02.exe.stackdump 任何有關導致此錯誤的原因以及如何修復它?cygwin異常stackdumpfile錯誤?

const string the_chars = "abcdefghijklmnopqrstuvwxyz"; 
string add_string_nums(string num1, string num2, long base) 
{ 
    string added_num=""; 
    long len1 = num1.length(), len2 = num2.length(), extra = 0, temp; 
    num1 = reverse_str(num1); 
    num2 = reverse_str(num2); 
while (len1 > len2) 
    num2 += "0"; 
while (len2 > len1) 
    num1 += "0"; 
num1 = reverse_str(num1); 
num2 = reverse_str(num2); 
for (int i = 1; i <= num1.length(); i ++) 
{ 
    temp = the_chars.find(num2[num2.length() - i]) + the_chars.find(num2[num2.length()-i]) + extra; 
    extra = 0; 
    if (temp > base) 
    { 
     extra = 1; 
     temp = temp - base; 
    } 
    added_num += the_chars.at(temp); 
    } 
    return added_num; 
} 
int main() { 
    string s = add_string_nums("1", "12", 10); 
    cout << s; 
    return 0; 
} 

回答

0

眼前的問題是在這裏:

while (len1 > len2) 
    num2 += "0"; 
while (len2 > len1) 
    num1 += "0"; 

len1len2緩存值,並不會改變作爲字符串增長的大小。除非兩個字符串的大小相同,否則一個循環會旋轉,直到它正在修改的字符串變得非常大以至於計算機用完存儲空間。

解決方案(還無需扭轉字符串):在那裏

while (len1 > num2.length()) 
    num2 = "0" + num2; 
while (len2 > num1.length()) 
    num1 = "0" + num1; 

情侶其他問題,但你不應該有任何麻煩找到他們with a debugger