Так и знал, что кодя на с-подобных столкнусь с этой ****. На ровных местах вылезает ошибка «доступ к памяти». Какая то переменная где-то кем-то удалилась и не может быть прочитана в другом месте.
Есть вот такая чепуха, которая в треде парсит логи на предмет ошибок и прочего
//lambda - вызывается тредом, передает локальную переменную строку
[](std::string line){
if (std::regex_search(line, std::regex(".*(some err).*"))) debug();
if (std::regex_search(line, std::regex(".*(some err2).*"))) debug();
if (std::regex_search(line, std::regex(".*(some err3).*"))) debug();
//...
}
Когда тред каким-то образом убивается (в моем случае это в основном при выходе из программы) вылезают ошибки доступа к памяти. По call-stack вижу что где то далеко в std::regexp (где то в 18 хопе вверх от моего вызова регекса). Как я понимаю, в regex_search() переменная далее идет по цепочке вызовов и в ккакой то момент она удаляется. Вот как такое предотвратить? Ведь на момент вызова regex_search() переменная существовала? Как я понимаю это из-за того что переменная локальная? Когда тред завершается принудительно переменная удаляется.
Может быть сделать некий конвеер, чтобы не локальную переменную передавать? Как лучше сделать, чтобы избежать такого?