2017-09-26 5 views
-1

세그먼트 오류가 발생하지만 포인터를 사용하지 않습니다. stringstream에 삽입 할 때 발생합니다.문자열 스트림에 삽입 할 때 세그먼트 오류가 발생했습니다.

std::string Relations::toString() 
{ 
    std::stringstream restring; 
    restring << ID << "("; 

    restring << reList[0]; // segmentation fault 

    for (int c = 1; c < reList.size(); c++) 
    { 
     restring << "," << reList[c]; 
    } 

    restring << ")"; 
    return restring.str(); 
} 
+0

처음에는 벡터가 비어 있거나 하나의 요소 만있는 경우 명백한 충돌이 발생합니다. –

+0

reList [1];에서 두 번째 항목에 액세스하기 전에'reList'의 크기가 충분한 지 확인하지 않는 것 같습니다. C/C++의 항목 인덱스는 일반적으로 0부터 시작합니다. – VTT

+0

segfault로 연결되는 호출을 표시하십시오. –

답변

0

reList[0]에 액세스하기 전에 확인해야합니다.

std::string Relations::toString() 
{ 
    std::stringstream restring; 
    restring << ID << "("; 

    if (reList.size() > 0) 
    { 
     restring << reList[0]; 
     for (std::size_t i = 1; i < reList.size(); ++i) 
     { 
      restring << "," << reList[i]; 
     } 
    } 

    restring << ")"; 
    return restring.str(); 
} 
0

나는 내 자신의 질문에 대답하여 이것이 바보 같은 질문임을 깨닫게했다. 다른 클래스에서이 클래스를 잘못 사용하고 있었고 내 벡터에 아무것도 들어 가지 않았습니다. 따라서 빈 벡터에 액세스하려고했습니다.