私はイメージマネージャーであるシングルトンを持っています。std :: mapは初期化する必要がありますか?
m_imageMap[imageHashID].setHeight(ilGetInteger(IL_IMAGE_HEIGHT));
m_imageMap[imageHashID].setWitdh(ilGetInteger(IL_IMAGE_WIDTH));
m_imageMap[imageHashID].setBpp(ilGetInteger(IL_IMAGE_BPP));
....
問題は私が得ることです:LoadFromFileメソッドに、私はマップに画像を保存し、
utils::CImageBuff* img4 = utils::CImageManager::getInstance()->loadFromFile("uswg.png");
そして:私はイメージをロードしようとすると、私はこのようにシングルトンを呼び出しますmemアクセスエラー。 m_imageMapがNULLの場合は間違って初期化されます。例外は最初の文でスローされるためです。しかし、私が言ったように、シングルトンなのでマップは私が初期化しなければならない。私はVC++ 2008で開発しています。間違ったコンパイル/ .objファイルになる可能性がありますか?
これは昨日正常に機能していた
いくつかのアドバイスはありますか?
編集: m_imageMapの宣言は非常に簡単である:付加情報として
typedef std::map<unsigned int,utils::CImageBuff> t_imageMap;
、生成された例外は、ファイルoutput.cの行1643にあります。
編集まあ、私はこのケースで非常にdissapointedです。コードを変更したので、クラスはもはやシングルトンではなくなりました。現在は、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の内容を削除するメソッドを考える必要があります。すべて
'm_imageMap'はどのように宣言されていますか? –
'm_imageMap'の定義を示してください。 'std :: map'は' NULL'にすることはできません。それは意味をなさない。 –
m_imageMapはどのようなタイプですか?残りのloadFromFile関数の外観はどうなっていますか? – SoapBox