2013-02-19 72 views
0

我遇到了一些簡單的函數,試圖將整數轉換爲字符串的麻煩。下面是代碼:C++ stringstream轉換錯誤

string Problem::indexB(int i, int j, int k){  
    stringstream ss; 

    if(i < 10) 
     ss << "00"; 
    else if(i<100) 
     ss << "0"; 
    ss << i; 

    if(j < 10) 
     ss << "00"; 
    else if(j<100) 
     ss << "0"; 
    ss << j; 

    if(k < 10) 
     ss << "00"; 
    else if(k<100) 
     ss << "0"; 
    ss << k; 

    return ss.str(); 
} 

功能工作正常,但是當多次調用它給了我一些點分段錯誤。

+0

哪一點?你做了什麼來調試它? – StoryTeller 2013-02-19 15:49:55

+3

錯誤不在此代碼片段中。嘗試使用valgrind來定位堆棧損壞或類似 – 2013-02-19 15:49:57

+0

問題出在返回行。我多次調用函數「.str()」後會導致分段錯誤。這是gdb的相關問題 '程序接收到的信號SIGSEGV,分段錯誤。 _int_malloc(av = 0x7ffff74191c0,bytes = 26)at malloc.c:4339 malloc.c:找不到文件或目錄。 \t in malloc.c' – user569709 2013-02-19 17:35:41

回答

1

它正常工作對我來說:http://ideone.com/lNOfFZ

完整的工作方案:該方案已運行到的東西與未定義行爲後

#include <string> 
#include <sstream> 
#include <iostream> 

using std::string; 
using std::stringstream; 

class Problem { 
public: 
    static string indexB(int i, int j, int k); 
}; 

string Problem::indexB(int i, int j, int k){ 

    stringstream ss; 

    if(i < 10) 
     ss << "00"; 
    else if(i<100) 
     ss << "0"; 
    ss << i; 

    if(j < 10) 
     ss << "00"; 
    else if(j<100) 
     ss << "0"; 
    ss << j; 

    if(k < 10) 
     ss << "00"; 
    else if(k<100) 
     ss << "0"; 
    ss << k; 

    return ss.str(); 
} 

int main() { 
    std::cout << Problem::indexB(1, 2, 3) << "\n"; 
    std::cout << Problem::indexB(400, 50, 6) << "\n"; 
    std::cout << Problem::indexB(987, 65, 432) << std::endl; 
} 

分段錯誤經常發生一段時間,所以堆棧跟蹤時出錯被發現並不一定與多功能代碼具有相同的功能。

+0

與gdb相關的問題在「.str()」函數中。這裏是我從調試器得到的信息'程序接收到的信號SIGSEGV,分段錯誤。 malloc.c中的_int_malloc(av = 0x7ffff74191c0,bytes = 26):4339 4339 malloc.c:未找到文件或目錄。 in malloc.c' – user569709 2013-02-19 17:37:36

+0

找到了!問題在於我將結果存儲在向量中。經過一些電話後,我清除了矢量,而不是再次調整大小。問題不在於返回,而在於用於存儲結果的變量。謝謝。 – user569709 2013-02-19 17:52:46