2011-02-15 67 views
0

我通過做法學習,並享受使用在線評判網站學習。目前我正在致力於 http://www.z-training.net/tasks.php?show_task=5000000406。一些測試用例通過,但很多都得到MLE/SEGF。我的代碼採取暴力手段。這種方法是否是MLE/SEGF錯誤的原因?MLE/SEGF錯誤

//z-last char 
#include <iostream> 
#include <string> 
using namespace std; 

int main() 
{ 
string str = ""; 
string tmp = ""; 
    string newStr = ""; 
    unsigned int strSize = 0; 
    unsigned int repeat; 
    unsigned int i; 
    int cnt = 0; 

    cin >> str; 
    cin >> repeat; 

    tmp = str; 
    strSize = str.size(); 

    for (i=1;i<repeat;i++) 
    { 
    str += tmp; 
    strSize += strSize; 
    } 

    while (strSize > 1) 
    { 
    cnt = 0; 
    newStr = ""; 
    for (i=1;i<strSize;i=i+2) 
    { 
     newStr += str[i]; 
     cnt += 1; 
    } 
    //cout << newStr << endl; 
    strSize = cnt; 
    str = newStr; 

    } 

    cout << newStr << endl; 
    return 0; 
} 
+0

如果您向我們提供導致問題的一些輸入信息,將會有所幫助。 – 2011-02-15 17:31:20

回答

0

我在這裏看到一些問題。 在C和C++中,數組從0開始編號,並以分配長度-1結束。

str[0]指的是str中的第一個字符。
str[str.length() - 1]指的是str中的最後一個字符。

此外,C字符串以二進制0結尾。某些C++字符串庫將它們的字符串保存爲C庫格式,因此可以在它們上使用C字符串函數。如果你打擾字符串末尾的0,並且字符串庫試圖使用C字符串lib函數,這也會導致seg錯誤。

由於您正在讀寫內存越界,您可能會遇到seg故障。