Безопасен ли доступ к необработанному указателю после std::vector::reserve?

Это довольно надуманно, но является ли следующий код "безопасным" (т.е. гарантированно не вызовет ошибку сегментации):

std::vector vec(1); // Ensures that &vec[0] is valid
vec.reserve(100);
memset(&vec[0], 0x123, sizeof(int)*100); // Safe?

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

Примечание! Как я могу получить адрес буфера, выделенного vector::reserve()? охватывает ту же тему, но меня больше интересует, является ли это безопасным и есть ли при этом подводные камни.

EDIT: Оригинальный код был неправильным, замените оригинальный memcpy на memset.

6
задан Community 23 May 2017 в 11:51
поделиться