"Boost :: алгоритм :: отделка" где-то запаниковал - PullRequest
0 голосов
/ 16 октября 2019

Я использовал алгоритм «boost ::gorith :: trim» в большей экосистеме, где он получает строку, обрезает все начальные или конечные пробелы и добавляет полученную строку в список, подобный этому;

    std::stringstream protocolStream(str);
    std::vector<int> protocols;
    std::string protocol;
while(std::getline(protocolStream, protocol, ',')) {
    boost::algorithm::trim(protocol);
    protocols.push_back(std::atoi(protocol.c_str()));
}

Однако, это приводит к появлению ядра, которое имеет следующие кадры, связанные с обрезкой:

    0  0x0000000801f2163f in __getCurrentRuneLocale () at ../stdhdrs/freebsd/runetype.h:102
1  __maskrune (_f=16384, _c=<optimized out>) at ../stdhdrs/freebsd/_ctype.h:108
2  __istype (_f=16384, _c=<optimized out>) at ../stdhdrs/freebsd/_ctype.h:129
3  std::ctype<char>::is (this=<optimized out>, __m=16384, __c=<optimized out>) at ../stdhdrs_cplus/freebsd/bits/ctype_inline.h:51
    4  boost::algorithm::detail::is_classifiedF::operator()<char> (this=<optimized out>, Ch=<optimized out>) at ../headers/boost/algorithm/string/detail/classification.hpp:45
    5  boost::algorithm::detail::trim_end_iter_select<__gnu_cxx::__normal_iterator<char*, std::string>, boost::algorithm::detail::is_classifiedF> (InEnd=0 '\000', InBegin=..., IsSpace=...) at ../headers/boost/algorithm/string/detail/trim.hpp:53
    6  boost::algorithm::detail::trim_end<__gnu_cxx::__normal_iterator<char*, std::string>, boost::algorithm::detail::is_classifiedF> (InBegin=..., InEnd=0 '\000', IsSpace=...) at ../headers/boost/algorithm/string/detail/trim.hpp:86
    7  boost::algorithm::trim_right_if<std::string, boost::algorithm::detail::is_classifiedF> (Input="9", IsSpace=...) at ../headers/boost/algorithm/string/trim.hpp:237
    8  0x0000000801f214fb in boost::algorithm::trim_if<std::string, boost::algorithm::detail::is_classifiedF> (Input="9", IsSpace=...) at ../headers/boost/algorithm/string/trim.hpp:360
    9  0x0000000801e384f4 in boost::algorithm::trim<std::string> (Input=<error reading variable: Cannot access memory at address 0xa5a5a5a5a5a50021>, Loc=...) at ../headers/boost/algorithm/string/trim.hpp:375

Я не могу понять, почему. Обратите внимание, что переменная 'str' будет иметь значение, подобное этому '1, 2, 3, 4'.

Может кто-нибудь выяснить, в чем именно заключается проблема.

...