2013-02-19 4 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

+3

이 코드 조각에는 오류가 없습니다. valgrind를 사용하여 스택 손상을 찾거나 이와 유사한 –

+0

문제가 반환 라인에 있는지 확인하십시오. 여러 번 호출하면 ".str()"함수가 세그멘테이션 오류를 발생시킵니다. 다음은 gdb와 관련된 문제입니다. '프로그램 수신 신호 SIGSEGV, 세그먼트 오류. malloc.c의 _int_malloc (av = 0x7ffff74191c0, bytes = 26) malloc.c : 4339 malloc.c : 파일 또는 디렉토리를 찾을 수 없습니다. \t in malloc.c' – user569709

답변

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()"함수에 있습니다. 다음은 디버거에서 가지고있는 것입니다. \t '프로그램 수신 신호 SIGSEGV, Segmentation fault. malloc.c에서 _int_malloc (av = 0x7ffff74191c0, bytes = 26) : 4339 4339 malloc.c : 파일 또는 디렉토리를 찾을 수 없습니다. malloc.c에서 – user569709

+0

찾았습니다! 문제는 결과를 벡터에 저장한다는 것이 었습니다. 일부 호출 후 벡터를 지우고 다시 크기를 조정하지 않았습니다. 문제는 반환에있는 것이 아니라 결과를 저장하는 데 사용 된 변수에 있습니다. 고맙습니다. – user569709