私は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
おかげ
最後に一つだけ、? 'NSLog(@"%@%X%f "、self、fontTexCoords、fontTexCoords [0]);' – Jason
確かに私の編集を見てください。ゼロ化はランダムであるように見えます。ランダムな値を持つ浮動小数点を壊すことがあります。何かが何とかメモリを上書きしています。私はそれが私だとは思わない、これは私が使用している唯一の非objcメモリです。私はdeallocメソッドでこのメモリを解放します。 – rein
私の問題が見つかりました...下の私の答えを参照してください。助けてくれたジェイソンに感謝します。 – rein