Например, если вы делаете что-то вроде:
std::string data1 = "One"
, тогда data1 [0] дает 'O', значение ASCII которого равно 79. Теперь вы используете это 79 в качестве адреса.
Таким образом, указатель с именем data имеет значение 79.
Поэтому, когда вы снова используете этот указатель в своем коде, вы фактически пытаетесь читать или записывать защищенную память (0x0000004F или 79).Следовательно, он падает во время выполнения.