2009-08-22 7 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されたメモリに変わってしまいます。

編集:( "initWithCoderた:%@%X%F" @、自己、fontTexCoords、fontTexCoords [0 8])のNSLogを使用initWithCoderにおける最初の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

私の問題が見つかりました...下の私の答えを参照してください。助けてくれたジェイソンに感謝します。 – rein

答えて

0

問題が見つかりました。それは私の愚かさでした。私は間違った方法で記憶を解放していた。何とか私はfree(fontTexCoords)をdeallocではなくlayoutViewに配置します。

愚かな、愚かな私:)あなたのNSLog呼び出しには "%X" とfontTexCoords自分自身を追加することができます

1

あなたのNSLog出力でselfが含まれるように呼び出して変更することはできますか?次に、両方の場所で使用されているのと同じビューであることを確認してください。

+0

はい、同じオブジェクトです – rein

関連する問題