Помогайте, местные гуру C++!
Есть код
auto get_freqs(const std::string& ctext, const int key_len, const int start_pos)
{
std::vector<int> count(256, 0);
std::vector<double> ret(256);
for (int i = start_pos; i < ctext.size(); i+= key_len)
count[ctext[i]]++;
std::transform(begin(count), end(count), begin(ret),
[key_len, &ctext](auto c){ return (double)c * key_len / ctext.size(); });
return ret;
}
auto get_freqs(const std::string& ctext, const int key_len)
{
std::vector<std::vector<double>> ret;
for (int i = 0; i < key_len; i++)
ret.push_back(get_freqs(ctext, key_len, i));
return ret;
}
При вызове функции с тремя параметрами всё ок, функция с 2-мя параметрами выдаёт сегфолт.
Чуть-чуть тыкал gdb, он говорит что сегфолт во free(), в backtrace что-то про std::allocator<int> написано.
Первым параметром передаю локальную переменную std::string. Самое забавное что при передаче строки (get_freqs(«azaza», 2);) никаких сегфолтов.