C ++ std :: vector <std :: shared_ptr> </std :: shared_ptr>

时间:2011-05-21 11:55:39

标签: c++

我遇到了shared_ptrS向量的问题。我的代码是:

//--------scoala.h--------

class Scoala
{
public:
    Scoala(std::string );

    int adaugaElev(std::shared_ptr<Elev> elev);
private:

    std::vector<std::shared_ptr <Elev>> __elevi;
};



//-----------scoala.cpp-----------------------------

int Scoala::adaugaElev(std::shared_ptr<Elev> elev)
{
    __elevi.push_back(elev);
    return __elevi.size() - 1;
}

我运行它,我得到了“在elev.exe中0x0137b559处的未处理异常:0xC0000005:访问冲突读取位置0xcccccd0c”。怎么了?

3 个答案:

答案 0 :(得分:1)

传递给adaugaElev的Elev对象很可能未分配,或者以某种方式未分配(shared_ptr中的引用计数为零) - 您需要发布更多代码,显示如何分配Elev对象以确认。< / p>

答案 1 :(得分:0)

valgrind下运行您的程序 - 它将有助于说明问题所在。

答案 2 :(得分:-1)

在C ++中使用双下划线前缀名称是未定义的行为。此外,由于各种原因,Elev可能会被破坏,我会追溯它的起源。