Библиотека глючит, и автор должен внести некоторые исправления.
Во-первых, компиляция дает нам предупреждение о SuggestItem::ShallowCopy
, которое возвращает локальную переменную по ссылке. Очень плохой! Мы можем изменить это, чтобы вернуть по значению, вероятно.
Это не исправляет сбой, однако.
Если мы клонируем репозиторий библиотеки, запустите следующий тестовый пример в отладчике:
#include "symspell6.h"
int main()
{
const char* inputTerm = "whereis th elove hehad dated forlmuch of thepast who couqdn'tread in sixtgrade and ins pired him";
symspell::SymSpell symSpell;
auto suggestions = symSpell.WordSegmentation(inputTerm);
}
& hellip; мы видим, что возврат compositions[circularIndex]
из функции WordSegmentation
вызывает неверный доступ в конструкторе shared_ptr
. Это говорит о том, что circularIndex
выходит за пределы и дает нам несуществующий shared_ptr
. Действительно, circularIndex
- это 95
, но compositions.size()
- это 0
!
В функции отсутствует серьезная проверка ошибок.
Теперь только автор (или, по крайней мере, тот, кто знает, что должна делать библиотека; это не я!) Может исправить это должным образом. Но в качестве быстрого патча я добавил следующее после строки 1055:
if (compositions.empty())
return nullptr;
& hellip; и теперь он, по крайней мере, работает.
Кажется, что функция предполагает, что словарь не пуст. Я не знаю, ожидаемое ли это поведение или нет (кроме отсутствующей проверки ошибок, как описано выше).
Проект нуждается в некоторой документации, потому что для этих функций не упоминаются предварительные условия или постусловия и нет указаний на то, как предполагается использовать библиотеку. Опять же, автор должен исправить эти вещи.