0

わからない。リストから語幹文字列を読み取り、各文字列に句読点が含まれているかどうかを確認し、単一の単語の画像のループにフレーズを作成する機能があります。ifステートメントでs.length()> 0のフレーズを構築/含む文字列をチェックすると、セグメンテーション違反が発生します。関数は次のとおりです。

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

多分私は盲目であるか何かが欠けています...

ご協力いただきありがとうございます!

4

1 に答える 1

2

ここは疑わしいようです

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

あなたは本当に意味がありませんでしたか

(image.compare(L"?") == 0)
于 2012-07-05T07:41:54.143 に答える