Это довольно надуманный, но следующий код "безопасен" (т.е. гарантированно не вызывает ошибку сегментации):
std::vector<int> vec(1); // Ensures that &vec[0] is valid
vec.reserve(100);
memset(&vec[0], 0x123, sizeof(int)*100); // Safe?
Я понимаю, что это уродливо - мне только интересно узнать, технически ли это безопасно, а не "красиво". Я предполагаю, что его единственным использованием может быть игнорирование значений, хранящихся за пределами данного индекса.
Внимание! Как я могу получить адрес буфера, выделенного vector:: reserve()?, охватывает ту же тему, но меня больше интересует, если это безопасно, и если это подводные камни, делающие это.
EDIT: Исходный код был неправильным, заменил оригинал memcpy
на memset
.