Ho un puntatore a una struttura e ho bisogno di implementare un metodo che copierà tutto il contenuto della memoria di una struttura. In generale, ho bisogno di eseguire una copia profonda di una struttura.C++: la struttura verrà copiata correttamente?
Ecco la struttura:
typedef struct {
Size2f spriteSize;
Vertex2f *vertices;
GLubyte *vertex_indices;
} tSprite;
Ed ecco il metodo che ho implementato che dovrebbe copiare la struttura:
tSprite* copySprite(const tSprite *copyFromMe)
{
tSprite *pSpriteToReturn = (tSprite*)malloc(sizeof(*copyFromMe));
memcpy(pSpriteToReturn, copyFromMe, sizeof(*copyFromMe));
return pSpriteToReturn;
}
Il problema è che io non sono sicuro che gli array "vertici" e "vertex_indices" verranno copiati correttamente. Cosa verrà copiato in questo modo? Indirizzo dell'array o dell'array stesso?
Devo copiare gli array dopo aver copiato la struttura? O è sufficiente solo per copiare la struttura?
Qualcosa di simile a questo:
...
pSpriteToReturn->vertices = (Vector2f*)malloc(sizeof(arraysize));
memcpy(pSpriteToReturn->vertices, copyFromMe->vertices, sizeof(arraysize));
...
Grazie in anticipo.
Dipende. Una copia dovrebbe essere una copia profonda, con vertici indipendenti * e * vertex_indices, o entrambe le copie dovrebbero condividere una singola copia dei dati? Come attualmente scritto, copySprite copia solo in modo superficiale i puntatori e condividono dati comuni. – Joe
Non sei sicuro del motivo per cui hai codificato questo C++ quando tutto il tuo codice è dritto C. –
Se il problema è C. Quindi esegue correttamente una copia superficiale. Se il problema è C++, apriamo un'intera scatola di worm che non può essere risolta perché non ci sono abbastanza informazioni. –