После вставки элементов в вашу строку строка может перераспределиться, и тогда ваш итератор не будет указывать на начало вашей строки, и он не будет действительным.
Так сделайте это
#include <iostream>
#include <string>
int main() {
std::string line = "";
std::string::iterator col = line.begin();
for (int i = 0;; i++) {
std::cout << line << std::endl;
std::cout << i << std::endl;
line.insert(col, 'a');
col = line.begin();
}
}
Обратите внимание, что это исправляет только проблему итератора, но ваш бесконечный l oop будет бесконечно расширять вашу строку, пока ваша программа не вылетит.