std :: vector push_back崩溃

时间:2015-08-28 21:52:31

标签: c++

你好我是一名经理

Color.h中的颜色类 - 包含在Manager.h之前

`Manager.h

class ColorEntry
{
private:
    const char* m_pszName;
    Color m_colColor;

public:
    inline const char* GetName(void) const { return m_pszName; }
    inline void SetName(const char* pszName) { m_pszName = pszName; }
    inline Color GetColor(void) { return m_colColor; }
    inline void SetColor(Color colNew) { m_colColor = colNew; }
};

class CColorManager
{
private:
    std::vector<ColorEntry*> m_vecColors;
public:
    void Initialize(void);
    --etc
}

Manager.cpp

void CColorManager::Initialize(void)
{
    AddColor("GUI_Outline", Color(0, 128, 255));
}

void CColorManager::AddColor(char* pszName, Color col)
{
    ColorEntry NewCvar;
    NewCvar.SetName(pszName);
    NewCvar.SetColor(col);
    m_vecColors.push_back(&NewCvar); -- crash here
}`
帮助我尝试了许多方法没有工作,我也有另一种方式来做到这一点,但没有颜色,它的工作原理是它的颜色搞砸了吗?

color是一个4字节的类

1 个答案:

答案 0 :(得分:1)

这一行

  

m_vecColors.push_back(安培; NewCvar); - 在这里崩溃

添加局部变量的指针,在AddColor完成后不再有效。你需要在这里添加从调用new返回的指针,如:

ColorEntry* pNewCvar = new ColorEntry();
 // ...
m_vecColors.push_back(pNewCvar);

但是你需要管理它的生命周期,所以最好把这个指针放到std :: shared_ptr。