добавление документа Lucene индексирует катастрофический отказ причин

я пытаюсь индексировать mp3 файл только с одним кадром ID3. с помощью CLucene и TagLib. хорошо работает следующий код:

...
TagLib::MPEG::File file("/home/user/Depeche Mode - Personal Jesus.mp3");
if (file.ID3v2Tag()) {
    TagLib::ID3v2::FrameList frameList = file.ID3v2Tag()->frameList();
    lucene::document::Document *document = new lucene::document::Document;
    TagLib::ID3v2::FrameList::ConstIterator frame = frameList.begin();
    std::wstring field_name((*frame)->frameID().begin(), (*frame)->frameID().end());
    const wchar_t *fieldName = field_name.c_str();
    const wchar_t *fieldValue = (*frame)->toString().toWString().c_str();
    lucene::document::Field field(fieldName, fieldValue, true, true, true, false);
    document->add(field);
    writer->addDocument(document);
}
...

но этот делает сбой приложения:

...
TagLib::MPEG::File file("/home/user/Depeche Mode - Personal Jesus.mp3");
if (file.ID3v2Tag()) {
    TagLib::ID3v2::FrameList frameList = file.ID3v2Tag()->frameList();
    lucene::document::Document *document = new lucene::document::Document;
    for (TagLib::ID3v2::FrameList::ConstIterator frame = frameList.begin(); frame != frameList.end(); frame++) {
            std::wstring field_name((*frame)->frameID().begin(), (*frame)->frameID().end());
            const wchar_t *fieldName = field_name.c_str();
            const wchar_t *fieldValue = (*frame)->toString().toWString().c_str();
            lucene::document::Field field(fieldName, fieldValue, true, true, true, false);
            document->add(field);
    }
    writer->addDocument(document);
}
...

почему это?!

1
задан Yuval F 1 July 2010 в 13:38
поделиться

2 ответа

Это проблема области видимости - к тому времени, когда вы вызываете writer->addDocument, поля, которые вы добавили в него, уже освобождены. Вместо этого используйте этот код:

document->add(* new lucene::document::Field(fieldName, fieldValue, true, true, true, false));

Вы можете посмотреть на cl_demo и cl_test, чтобы увидеть примеры кода.

2
ответ дан 2 September 2019 в 23:23
поделиться

Разве вам не нужно создавать новое lucene::document::Field для каждого добавляемого тега? Похоже, что вы повторно используете один и тот же адрес для этого, что проблематично. Думаю, отладчик может сказать вам больше.

0
ответ дан 2 September 2019 в 23:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: