C-matriz para NSData e volta
Pergunta
Eu estou tentando salvar uma matriz C-estilo de estruturas Vertex3D a um objeto NSData e levá-los de volta ao recarregar o aplicativo:
NSData *vert = [NSData dataWithBytes:&vertices length:(sizeof(Vertex3D) * NUM_OF_VERTICES)];
Esta informação é então guardada e tentou ser lido para trás em minha c-array assim:
vertices = malloc(sizeof(Vertex3D) * NUM_OF_VERTICES);
[vert getBytes:&vertices length:(sizeof(Vertex3D) * NUM_OF_VERTICES)];
Os resultados acima em “EXC_BAD_ACCESS” seguido por:
malloc: *** error for object 0x48423c0: pointer being freed was not allocated
Eu sou muito novo para programação de modo que provavelmente há algum princípio fundamental de gerenciamento de memória que eu sou desconhecem. I ter verificado que o NSData carregado é idêntico ao salvo um, mas é evidente que a transição a partir de c-matriz para NSData (e volta) não é tão I pretendido.
Solução
É impossível dizer sem ver o seu declaração para a variável vertices
, mas usando &vertices
provavelmente está errado no código que você listar na sua pergunta. Se vertices
é uma matriz C, então já é um ponteiro e você deve omitir o &
operador de endereço.