Mam wskaźnik do struktury i muszę wdrożyć metodę, która skopiuje całą zawartość pamięci struktury. Ogólnie mówiąc, muszę wykonać głęboką kopię struktury.C++: Czy struktura będzie poprawnie skopiowana?
Oto struktura:
typedef struct {
Size2f spriteSize;
Vertex2f *vertices;
GLubyte *vertex_indices;
} tSprite;
A oto metoda I zostały wdrożone, że należy skopiować strukturę:
tSprite* copySprite(const tSprite *copyFromMe)
{
tSprite *pSpriteToReturn = (tSprite*)malloc(sizeof(*copyFromMe));
memcpy(pSpriteToReturn, copyFromMe, sizeof(*copyFromMe));
return pSpriteToReturn;
}
Problemem jest to, że nie jestem pewien, że tablice „wierzchołki” a "vertex_indices" zostaną poprawnie skopiowane. Co będzie kopiowane w ten sposób? Adres tablicy lub samej tablicy?
Czy należy skopiować tablice po skopiowaniu struktury? A może wystarczy skopiować strukturę?
coś takiego:
...
pSpriteToReturn->vertices = (Vector2f*)malloc(sizeof(arraysize));
memcpy(pSpriteToReturn->vertices, copyFromMe->vertices, sizeof(arraysize));
...
Z góry dziękuję.
To zależy. Czy kopią powinna być kopia głęboka, z niezależnymi * wierzchołkami i * wierzchołkami_indeksów, czy też obie kopie powinny mieć jedną kopię danych? Jak napisano, twój copysprite będzie tylko płytko kopiował wskaźniki i będą one miały wspólne dane. – Joe
Nie wiem, dlaczego otagowałeś to C++, gdy cały twój kod jest prosty C. –
Jeśli problem dotyczy C. Wtedy to poprawnie robi płytką kopię. Jeśli problem dotyczy C++, otwieramy całą puszkę robaków, na którą nie można odpowiedzieć, ponieważ nie ma wystarczającej ilości informacji. –