イメージマネージャーであるシングルトンがあります。画像を読み込もうとすると、次のようにシングルトンを呼び出します。
utils::CImageBuff* img4 = utils::CImageManager::getInstance()->loadFromFile("uswg.png");
そして、loadFromFile メソッドで、画像をマップに保存します。
m_imageMap[imageHashID].setHeight(ilGetInteger(IL_IMAGE_HEIGHT));
m_imageMap[imageHashID].setWitdh(ilGetInteger(IL_IMAGE_WIDTH));
m_imageMap[imageHashID].setBpp(ilGetInteger(IL_IMAGE_BPP));
....
問題は、mem アクセス エラーが発生することです。最初の文で例外がスローされるため、m_imageMap が NULL または間違った初期化の場合と同様です。しかし、私が言ったように、これはシングルトンなので、マップを初期化する必要があります。VC++ 2008 で開発しています。コンパイル/.obj ファイルが間違っている可能性がありますか?
これは昨日はうまくいきました
いくつかのアドバイス?
編集: m_imageMap の宣言は非常に単純です:
typedef std::map<unsigned int,utils::CImageBuff> t_imageMap;
追加情報として、生成された例外はファイル output.c の 1643 行にあります。
編集さて、私はこのケースに非常に失望しています。コードを変更したので、クラスはシングルトンではなくなりました。m_imageMap のみが静的になり、ロードされたすべての画像がどこからでも見えるようになりました。しかし、それでも同じように失敗します。エラーはアクセス違反です。さらに、このコードですべてのメソッド コードを次のように変更すると、次のようになります。
utils::CImageBuff im;
m_imageMap[1] = im; // fails here
return &im;
それでも失敗します。マップがnullまたは何らかの方法でロックされているか、初期化が間違っているようですが、わかりません。私たちを手伝ってくれますか?
さらにコードが必要な場合は貼り付けますが、この 3 行でクラッシュすると問題が簡単になると思います。
編集:最終的に解決されました最終的に私はから変更しました
std::map<unsigned int,utils::CImageBuff>
に
std::map<unsigned int,utils::CImageBuff*>
そして今、それは機能します。ここで、ポインターの静的 std::map の内容を削除する方法を考える必要があります。
皆さんに感謝します