Ошибки подтверждения boost::ptr_map<> и _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

Первый вопрос по stackru, надеялся получить некоторую помощь в этом вопросе. Если вы посмотрите на следующий класс EffectManager, я получаю ошибку подтверждения для _BLOCK_TYPE_IS_VALID(pHead->nBlockUse), когда экземпляр EffectManager освобожден.

Это как-то связано с попыткой освободить память из карты эффектов, если я никогда не вставлю эффект в карту, я не столкнусь с этой проблемой.

это также будет хорошо работать, если я использую базовую карту STL, т.е.

typedef std::map<std::wstring, ID3DXEffect*> EffectsMap;

class EffectManager
{
public:
    typedef boost::ptr_map<std::wstring, ID3DXEffect> EffectsMap;
    EffectManager();
    ~EffectManager();
    void init();
    ID3DXEffect *loadEffect(LPDIRECT3DDEVICE9 d3ddev, std::wstring effectfile);

private:
    std::shared_ptr<EffectsMap> effects_;
};

EffectManager::EffectManager() : effects_(NULL)
{
}

EffectManager::~EffectManager()
{
    for(auto it = effects_->begin(); it != effects_->end(); it++){
        it->second->Release();
    }
}

void EffectManager::init()
{
    effects_ = std::shared_ptr<EffectsMap>(new EffectsMap());
}

ID3DXEffect *EffectManager::loadEffect(LPDIRECT3DDEVICE9 d3ddev, std::wstring effectfile)
{
    if(!effects_)
        return NULL;

    ID3DXEffect *effect;
    if(effects_->count(effectfile)){
        effect = effects_->find(effectfile)->second;
    } else {
        D3DXCreateEffectFromFile(d3ddev, effectfile.c_str(), NULL, NULL, D3DXFX_NOT_CLONEABLE, NULL, &effect, NULL);
        effects_->insert(effectfile, effect);
    }

    return effect;
}

0 ответов

Другие вопросы по тегам