2010-03-11 3 views
1

je tente de sauver un tableau c-style de Vertex3D struct à un objet NSData et les récupérer lors du rechargement de l'application:C-tableau à NSData et à l'arrière

NSData *vert = [NSData dataWithBytes:&vertices length:(sizeof(Vertex3D) * NUM_OF_VERTICES)]; 

Ces données sont ensuite enregistrées et tenté de lire de nouveau dans mon c-gamme ainsi:

vertices = malloc(sizeof(Vertex3D) * NUM_OF_VERTICES); 
[vert getBytes:&vertices length:(sizeof(Vertex3D) * NUM_OF_VERTICES)]; 

Les résultats ci-dessus dans « EXC_BAD_ACCESS » suivi par:

malloc: *** error for object 0x48423c0: pointer being freed was not allocated 

Je suis très novice en programmation, il y a probablement un principe fondamental de gestion de la mémoire que je ne connais pas. J'ai vérifié que le NSData chargé est identique à celui enregistré, mais il est clair que la transition de c-array à NSData (et arrière) n'est pas comme je l'ai prévu.

Répondre

2

Il est impossible de dire sans voir votre déclaration pour la variable vertices, mais l'utilisation de &vertices est probablement erronée dans le code que vous avez indiqué dans votre question. Si vertices est un tableau C, alors il est déjà un pointeur et vous devez omettre l'opérateur d'adresse &.

+0

J'ai déclaré le tableau de sommets ainsi: Vertex3D * vertices; J'ai essayé d'omettre le &. Cela l'empêche de s'écraser, mais le tableau n'est pas correctement rempli. –

+0

Merci pour votre aide. Le problème était en effet mon appel & sommets lors de l'enregistrement des données (et le chargement aussi), qui, si je comprends bien, juste enregistré une référence à la mémoire au lieu des données. –