2009-08-22 29 views
-1

我有一些在initWithCoder中初始化的內存:我可以在initWithCoder的「返回自我」部分之前驗證內存是否已初始化。在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的內存做了奇怪的事情?

編輯:

在的initWithCoder第一8個浮子使用的NSLog的輸出(@ 「的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

最後一件事情,你可以添加「%X」和fontTexCoords本身到你的NSLog調用? 'NSLog(@「%@%X%f」,self,fontTexCoords,fontTexCoords [0]);' – Jason 2009-08-22 19:19:56

+0

當然..請參閱我的編輯。看起來零點是隨機的 - 有時它會隨機值破壞我的浮點數。有些東西在某種程度上覆蓋了內存。我不認爲這是我,這是我使用的唯一非objc記憶。我只在dealloc方法中釋放這個內存。 – rein 2009-08-22 19:30:14

+0

發現我的問題...請參閱下面的答案。感謝Jason的幫助。 – rein 2009-08-22 19:35:55

回答

0

發現此問題。這是我的愚蠢。我用錯誤的方法釋放了記憶。不知何故,我把免費(fontTexCoords)放在layoutView中而不是dealloc中。

傻,傻我:)

1

你可以改變你的NSLog調用中所包括的輸出self?然後確認它是在兩個地方使用的相同視圖:

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

是的,它是同一個對象 – rein 2009-08-22 19:11:07