Tengo un puntero a una estructura y necesito implementar un método que copie todos los contenidos de la memoria de una estructura. En términos generales, necesito realizar una copia profunda de una estructura.C++: ¿Se copiará la estructura correctamente?
Aquí está la estructura:
typedef struct {
Size2f spriteSize;
Vertex2f *vertices;
GLubyte *vertex_indices;
} tSprite;
Y aquí es el método que yo he implementado que debe copiar la estructura:
tSprite* copySprite(const tSprite *copyFromMe)
{
tSprite *pSpriteToReturn = (tSprite*)malloc(sizeof(*copyFromMe));
memcpy(pSpriteToReturn, copyFromMe, sizeof(*copyFromMe));
return pSpriteToReturn;
}
El problema es que no estoy seguro de que las matrices "vértices" y "vertex_indices" se van a copiar correctamente. ¿Qué se va a copiar de esta manera? Dirección de la matriz o la matriz en sí?
¿Debo copiar las matrices después de copiar la estructura? ¿O es suficiente solo copiar la estructura?
Algo como esto:
...
pSpriteToReturn->vertices = (Vector2f*)malloc(sizeof(arraysize));
memcpy(pSpriteToReturn->vertices, copyFromMe->vertices, sizeof(arraysize));
...
Gracias de antemano.
Depende. ¿Debe una copia ser una copia profunda, con vértices independientes * y * vertex_indices, o ambas copias deben compartir una sola copia de los datos? Tal como está escrito actualmente, copySprite solo copiará los punteros y compartirán datos comunes. – Joe
No estoy seguro de por qué ha etiquetado este C++ cuando todo su código es directo C. –
Si el problema es C. Entonces hace una copia poco profunda. Si el problema es C++, abrimos una lata de gusanos que no se puede responder porque no hay suficiente información. –