2012-07-05 6 views
0

난 이해 못 하겠어. List에서 줄기가있는 문자열을 읽는 기능이 있습니다. 각 문자열에 구두점이 포함되어 있는지 확인하고 단일 단어 이미지의 루프에 구문을 작성합니다. if 문에 s.length()> 0이라는 문구가 포함 된 문자열을 확인하면 seg 오류가 발생합니다. 여기에 기능은 다음과 같습니다std :: wstring 테스트 길이의 세그먼트 화 오류

std::wstring 
Phrase::userFriendlyTerms() { 
    std::wstring s = L""; 

    List<Object> *terms = getTerms(); 

    Iterator<Object> *i = terms->iterator(); 
    for (; i->hasNext();) { 
     StemmedTerm *t = (StemmedTerm *) i->next(); 
     std::wstring image = t->getTerm(); 

     // --- gdb shows me a seg. fault with s.length() 
     if (s.length() > 0 && 
      !((image.compare(L",") == 0) || (image.compare(L"?" == 0)) 
       || (image.compare(L"!") == 0) 
       || (image.compare(L";") == 0))) { 
      s.append(L" "); 
     } 
     s.append(image); 
    } 
    delete i; 

    return s; 
} 

정확한 오류 메시지는 다음과 같습니다

Program received signal SIGSEGV, Segmentation fault. 
__wcslen (s=0x0) at wcslen.c:30 
30 wcslen.c: No such file or directory. 
    in wcslen.c 
(gdb) run 
The program being debugged has been started already. 
Start it from the beginning? (y or n) n 
Program not restarted. 
(gdb) backtrace 
#0 __wcslen (s=0x0) at wcslen.c:30 
#1 0x00007ffff7b89e56 in std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::compare(wchar_t const*) const() from /usr/lib/libstdc++.so.6 
#2 0x00000000004833ed in Phrase::userFriendlyTerms (this=0x1425ac0) at algorithm/Phrase.cpp:56 

는 어쩌면 나는 장님 또는 뭔가를 놓친입니다 ... 당신의 도움을

감사합니다!

답변

2

이 여기 보이는

의심스러운
(image.compare(L"?" == 0) 

당신은 당신이

(image.compare(L"?") == 0) 
+0

내 하나님을 의미하지 않았다입니다, 감사합니다! 네, 그게 다야! 그것은 동일한 기능을 오랫동안 사용하여 발생합니다. 나는 그것이 매우 간단하다는 것을 알았다. –