2009-08-22 2 views
-1

initWithCoder :에서 초기화되는 메모리가 있습니다. initWithCoder의 "return self"부분 전에 메모리가 초기화되었는지 확인할 수 있습니다.initWithCoder에서 초기화 된 메모리가 drawView에서 손실됩니다.

나는의 malloc을 사용하여 메모리를 할당하고 사용자 정의 기능을 사용하여 입력 :

// in initWithCoder: 
fontTexCoords = (GLfloat *)malloc(10 * 8 * sizeof(GLfloat)); 
[fontInfo textureCoordinatesToArray:fontTexCoords]; 
NSLog(@"%f", fontTexCoords[0]); // correctly outputs 1.0 

하지만, 내 드로잉 루틴에 그 메모리의 내용이 제로가 된 것 같다을 :

// in drawView 
NSLog(@"%f", fontTexCoords[0]); // incorrectly outputs 0.0 

나는 응용 프로그램의 다른 장소에서 메모리를 만지지 않습니다.

질문 : 모든 데이터가 손실되는 이유는 무엇입니까? initWithCoder와 drawView 사이의 어떤 프로세스가 내 malloc 된 메모리에 이상한 일을하고 있습니까?

편집 :

NSLog 사용 initWithCoder의 제 8 플로트의 출력 (@ "initWithCoder % @ %의 X %의 f를"자기, fontTexCoords, fontTexCoords [0 ~ 8]);

2009-08-22 21:25:15.220 Memory[32706:20b] initWithCoder: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.000000 
2009-08-22 21:25:15.221 Memory[32706:20b] initWithCoder: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 1.000000 
2009-08-22 21:25:15.222 Memory[32706:20b] initWithCoder: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.000000 
2009-08-22 21:25:15.223 Memory[32706:20b] initWithCoder: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.500000 
2009-08-22 21:25:15.223 Memory[32706:20b] initWithCoder: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.500000 
2009-08-22 21:25:15.224 Memory[32706:20b] initWithCoder: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.500000 
2009-08-22 21:25:15.224 Memory[32706:20b] initWithCoder: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.500000 
2009-08-22 21:25:15.224 Memory[32706:20b] initWithCoder: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 1.000000 

NSLog를 사용 drawView로부터의 출력 (@ "drawView %의 @ %의 X %의 F의"자기, fontTexCoords, fontTexCoords [0 8-]);

2009-08-22 21:25:15.399 Memory[32706:20b] drawView: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.000000 
2009-08-22 21:25:15.399 Memory[32706:20b] drawView: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.000000 
2009-08-22 21:25:15.400 Memory[32706:20b] drawView: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.000000 
2009-08-22 21:25:15.401 Memory[32706:20b] drawView: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.000000 
2009-08-22 21:25:15.403 Memory[32706:20b] drawView: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.000000 
2009-08-22 21:25:15.404 Memory[32706:20b] drawView: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.000000 
2009-08-22 21:25:15.404 Memory[32706:20b] drawView: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.000000 
2009-08-22 21:25:15.405 Memory[32706:20b] drawView: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.000000 

감사

+0

마지막으로 한가지,? 'NSLog (@ "% @ % X % f", self, fontTexCoords, fontTexCoords [0]); ' – Jason

+0

내 편집을 참조하십시오. 영점 조정이 무작위 인 것 같습니다. 때로는 임의 값을 가진 부동 소수점을 손상시킵니다. 뭔가가 어떻게 든 메모리를 덮어 씁니다. 나는 그것이 나이라고 생각하지 않는다, 이것은 내가 사용하고있는 유일한 비 objc 메모리이다. dealloc 메서드에서이 메모리 만 해제합니다. – rein

+0

내 문제가 발견되었습니다 ... 내 대답은 아래 참조하십시오. 도움을 주신 Jason에게 감사드립니다. – rein

답변

0

문제를 발견. 그것은 내 어리 석음이었다. 나는 잘못된 방법으로 기억을 풀고 있었다. 어떻게 든 free (fontTexCoords)를 dealloc 대신 layoutView에 넣습니다.

바보, 바보 나 : 당신이 당신의 NSLog 호출에 "%의 X"와 fontTexCoords 자체를 추가 할 수 있습니다

1

당신이 당신의 NSLog 출력에 self을 포함 호출을 변경할 수 있습니까? 그런 다음 두 장소에서 사용되는 동일한 뷰의 확인 :

NSLog(@"%@ %f", self, fontTexCoords[0]); 
+0

예 동일한 개체입니다. – rein

관련 문제