Показать сообщение отдельно

  #2663  
Старый 17.07.2018, 03:01
san0
Постоянный
Регистрация: 15.12.2013
Сообщений: 412
С нами: 6530249

Репутация: 133
По умолчанию

Цитата:
Сообщение от Roger571  

Просто для себя понять почему вот так случается
Мне кажется, что проблема заключается в том, что std::string sString был инициализирован с помощью конструктора копирования, и его цикл жизни был только в пределеах функции easyRegex().

Операция regex_search была выполнена над строкой, которая, по сути, не имеет ничего общего с sTest (незавимая копия), но к ее элементам все равно хотят достучаться в тот момент, когда их существование явно не гарантировано.

К слову говоря, полученый результат мог бы быть и другим. Точнее, здесь все аналогично тому, как пытаться получить доступ к данным, расположеным в освобожденной памяти - иногда это, возможно, и работает.

В общем, вот этот вектор boostorg/regex(https://github.com/boostorg/regex/blob/5d990fd751a8c149dd47fbaf24eaaffd1bde3bd5/include/boost/regex/v4/match_results.hpp#L577) в результате и ломается

Подводя итоги, следует передать строку тоже по ссылке bool easyRegex(std::string& sString, ... etc ...

Цитата:
Сообщение от SR_team  

Бери STL
Так в STL часто переносят то, что хорошо показало себя в boost (конечно с фиксами всякими (напр. filesystem)).
 
Ответить с цитированием