C-массив для NSData и обратно - PullRequest
1 голос
/ 12 марта 2010

Я пытаюсь сохранить массив структур в стиле c Vertex3D в объект NSData и вернуть их при перезагрузке приложения:

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

Эти данные затем сохраняются и пытаются быть прочитаны обратно в мой c-массив таким образом:

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

Приведенные выше результаты показывают «EXC_BAD_ACCESS», за которым следует:

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

Я очень новичок в программировании, поэтому, возможно, есть какой-то фундаментальный принцип управления памятью, о котором я не знаю. Я проверил, что загруженные NSData идентичны сохраненному, но ясно, что переход от массива c к NSData (и обратно) не такой, как я предполагал.

1 Ответ

2 голосов
/ 12 марта 2010

Невозможно определить, не увидев объявление для переменной vertices, но использование &vertices, вероятно, неправильно в коде, который вы перечислите в своем вопросе. Если vertices является массивом C, то это уже указатель, и вы должны опустить адресный оператор &.

...