理解できない奇妙な問題に出くわしました。私は C/C++ の専門家ではないので、ご容赦ください。Sprite クラスから派生した Player クラスから派生した NPC クラスがあります。スプライト クラスには setupAnimation 関数が含まれており、テクスチャ上の座標を含む float の配列を割り当てます。配列の各要素はアニメーションのフレームを参照します。これはすべて良好で、正常に動作します。
ただし、ポインターの配列を NPC クラスに追加すると問題が発生します。これらのポインターは Item クラス型です。この配列を追加すると、配列が小さい場合 (テストしたサイズは 10 でした) は問題なく動作しますが、サイズが少し大きい場合 (100 は私がテストしたサイズでした)、前述のテクスチャ座標に float の配列を割り当てるとクラッシュします。テスト済み)。
上記の資料を示すコードの一部を次に示します。
ポインターの Item クラス配列:
engItem* itsLoot[100]; // With 100 here, the crash occurs as shown below
テクスチャ座標とそれに対応する割り当て:
GLfloat* itsTextureXData;
GLfloat* itsTextureYData;
...
animationFile >> frameCount; // Tested, the value is correct
engDeallocate(getTextureXData(), true); // Works fine
itsTextureXData = new GLfloat[frameCount]; // This is where the crash occurs
engDeallocate(getTextureYData(), true);
itsTextureYData = new GLfloat[frameCount];
このコードの断片は、Sprite クラスから派生するすべてのクラスの基礎です。私が理解できないのは、余分な 90 個のポインターが float の割り当て中に問題を引き起こす理由です。これに付随するちょっとしたソフトウェア情報
OS: Windows Vista 32 ビット、コンパイラ: Visual C++ 9.0、プログラム ランタイム メモリ: ~17,600k、システム メモリ: ~2GB
これを念頭に置いて、メモリが枯渇していることはわかりません。また、ポインターの配列が割り当ての失敗の原因となる方法を関連付けることもできません。前述のように、割り当ては Sprite から派生した他のすべてのクラス (および Sprite 自体) で正常に機能しますが、このポインターの配列が NPC クラスに追加されると、NPC はクラッシュせずにこのテクスチャ データ float 配列を割り当てなくなります。