questo è abbastanza inverosimile, ma è il seguente codice "sicuro" (cioè sia garantito contro eventuali errore di segmentazione):Sta entrando nel puntatore raw dopo std :: vector :: reserve safe?
std::vector<int> vec(1); // Ensures that &vec[0] is valid
vec.reserve(100);
memset(&vec[0], 0x123, sizeof(int)*100); // Safe?
mi rendo conto che questo è brutto - mi interessa solo sapere se è tecnicamente sicura , non carino". Immagino che il suo unico utilizzo potrebbe essere quello di ignorare i valori memorizzati oltre un determinato indice.
Nota! How can I get the address of the buffer allocated by vector::reserve()? copre lo stesso argomento, ma sono più interessato se si tratta di sicuro e se ci sono problemi a farlo.
MODIFICA: il codice originale era errato, sostituito originale memcpy
con memset
.
Ok, questo è così brutto che fa male. Perché lo stai facendo? Non puoi semplicemente usare un array, se proprio devi? In questo esempio 100 è fisso, quindi è possibile utilizzare una matrice nello stack senza eliminare anche [] ing ... – Francesco
"Errore di segmentazione" è un evento specifico della piattaforma. Il linguaggio C++ non descrive quello che è. La lingua dice solo se qualcosa è definito, e se è così, per fare cosa. –
Ho svalutato la domanda, non perché la considero una domanda sbagliata, ma perché non hai impiegato abbastanza tempo per assicurarti che quello che stavi chiedendo fosse quello che volevi chiedere (il codice originale e il codice nella versione attuale sono piuttosto diverso).-2 punti Rep non sono molti, ma in futuro dovresti ricordarti di essere un po 'più cauti, come quando chiedi alle altre persone il tempo di rispondere cercando di aiutare, ed è il momento che si perde se riformuli la domanda più tardi sopra. –