• ベストアンサー

メモリ確保できない

http://okwave.jp/qa2481659.html の続きのようなものです。 フリー版VC++2005でゲームを作成しています。 特定の自作クラスの分のメモリ確保をしようとすると必ず失敗します。 そのクラスは数十バイト程度の大きさしかなく、継承や演算子上書きは使用していません。コンストラクタは使用していません。特に怪しい部分が見つけられません。しかし、newすればbad_allocとなり、mallocを使えばNULLを返します。 OSはWindowsXpです。irrlicht 1.1という3Dライブラリを使用していますのでこれが何か影響している可能性はあります。 この現象の原因と解決方法をお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

確かに、見た感じではおかしいところはないですね。 一番可能性として考えられるのは、どこかでヒープを破壊しているのではないかということです。 その場合、同じ場所で、malloc(60)とか、場合によってはmalloc(1)を呼び出しただけでNULLを返すかもしれません。デバッグヒープを使うなどして追跡した方がよいと思います。

k_ppm
質問者

お礼

int a[16]; memset(a, 0, 256); のようなことやっていました。 指摘されたとおりヒープを破壊していました。 ありがとうございました。

その他の回答 (1)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

その自作クラスのクラス指定子を見ないと正確なことは分かりません。 最低限、sizeof(その自作クラス)の評価結果を補足してください。

k_ppm
質問者

補足

補足します。 メンバ変数の型はirrlichtライブラリで定義されているものがほとんどです。 以下のようなクラスでsizeof(MyClass)は60です。 class MyClass { public: static MyClass** Handle; static INT32* Index; INT32 ID; vector3df* Pos; vector3df Vec; vector3df Rot; IAnimatedMesh* Mesh; IAnimatedMeshSceneNode* Node; ISceneNodeAnimatorCollisionResponse* Animator; ISceneNode* Target; UINT32 Time; UINT32 LastTime; INT32 LastState; ~MyClass(); void Function(void); static void Initialize(void); static void Finalize(void); static MyClass* Create(void); static void Release(MyClass* p); }; また、PCを代えると突然動き出しました。 しかし、こちらのPCでも同じようなこと(最上記URLの質問)があったので奇跡的なバランスではないかと考えています。

関連するQ&A

専門家に質問してみよう