Esto es bastante inverosímil, pero es el siguiente código "seguro" (es decir, que no pueda causar fallo de segmentación):¿Es seguro acceder al puntero sin formato después de std :: vector :: reserve?
std::vector<int> vec(1); // Ensures that &vec[0] is valid
vec.reserve(100);
memset(&vec[0], 0x123, sizeof(int)*100); // Safe?
Soy consciente de que esto es feo - Sólo me interesa saber si es técnicamente seguros , no es bonito". Supongo que su único uso podría ser ignorar los valores almacenados más allá de un índice determinado.
Nota! How can I get the address of the buffer allocated by vector::reserve()? cubre el mismo tema, pero estoy más interesado si esto es seguro y si hay trampas para hacer esto.
EDITAR: El código original era incorrecto, reemplazó el original memcpy
con memset
.
Ok, esto es tan feo que duele. ¿Por qué estás haciendo eso? ¿No puedes simplemente usar una matriz, si realmente tienes que hacerlo? En este ejemplo, 100 es fijo, por lo que podría usar una matriz en la pila sin eliminar [] ing ... – Francesco
"Error de segmentación" es un evento específico de la plataforma. El lenguaje C++ no describe de qué se trata. El idioma solo dice si algo está definido, y si es así, para hacer qué. –
He votado negativamente, no porque lo considere una mala pregunta, sino porque no se tomó el tiempo suficiente para asegurarse de que lo que estaba preguntando era lo que quería decir (el código original y el código en la versión actual son bastante diferente).-2 puntos de repetición no son muchos, pero deberían recordarle en el futuro que sea un poco más cuidadoso, como cuando le pide a otras personas que se tomen el tiempo para responder tratando de ayudar, y ese es el momento que se desperdicia si reformula la pregunta más adelante en. –