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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top