C-array per NSData e indietro
Domanda
Sto tentando di salvare una serie c-stile di struct Vertex3D a un oggetto NSData e farli indietro quando ricaricare l'applicazione:
NSData *vert = [NSData dataWithBytes:&vertices length:(sizeof(Vertex3D) * NUM_OF_VERTICES)];
Questi dati vengono quindi salvato e ha tentato di essere letto nuovamente dentro il mio c-array nel seguente modo:
vertices = malloc(sizeof(Vertex3D) * NUM_OF_VERTICES);
[vert getBytes:&vertices length:(sizeof(Vertex3D) * NUM_OF_VERTICES)];
I risultati di cui sopra in “EXC_BAD_ACCESS” seguito da:
malloc: *** error for object 0x48423c0: pointer being freed was not allocated
Sono molto nuovo alla programmazione quindi c'è probabilmente un principio fondamentale di gestione della memoria che sono a conoscenza. Ho verificato che il carico NSData è identica a quella salvata, ma è chiaro che la transizione da c-array per NSData (e viceversa) non è così intendevo.
Soluzione
E 'impossibile dire senza vedere la sua dichiarazione per la variabile vertices
, ma utilizzando &vertices
è probabilmente sbagliato nel codice di elencare nella sua interrogazione. Se vertices
è un array C, allora è già un puntatore e si dovrebbe omettere la &
operatore di indirizzo.