문제

vertex3d structs의 C 스타일 배열을 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가 저장된 NSData와 동일하다는 것을 확인했지만 C- 어레이에서 NSDATA (및 뒷면)로의 전환은 내가 의도 한대로가 아니라는 것이 분명합니다.

도움이 되었습니까?

해결책

당신의 선언을 보지 않고 말하는 것은 불가능합니다. vertices 변수이지만 사용합니다 &vertices 질문에 나열하는 코드에서 잘못되었을 것입니다. 만약에 vertices C 배열이고 이미 포인터이며 주소 연산자를 생략해야합니다. &.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top