C++ std :: vector
问题描述:
我遇到了shared_ptrS向量的问题。我的代码是:C++ std :: vector <std :: shared_ptr>
//--------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:0000005:访问冲突读取位置0xcccccd0c”。怎么了 ?
答
传递给adaugaElev的高电平对象很可能未被分配,或者以某种方式未分配(引用计数在shared_ptr中为零) - 您需要发布更多代码,以显示如何分配Elev对象以确认这一点。
答
在C++中使用双下划线前缀名是未定义的行为。另外,Elev可能因各种原因被捣毁,我会追查它的起源。
+0
那么,不完全没有定义的行为... – 2011-05-21 14:49:37
+0
其实,我很确定它实际上是未定义的行为。 – Puppy 2012-08-26 10:46:24
除了其他任何名称'__elevi'在C++用户代码中是非法的,所有包含双下划线或以下划线和大写字母开头的名称都是非法的。您还需要发布调用您的函数的代码,并调查引用的概念。 – 2011-05-21 11:58:19
请使用文本编辑器中的“{}”按钮来格式化您的代码。当你的问题*可读*时,你会得到更好的答案。 – jalf 2011-05-21 11:59:21
是的,没有什么奇怪的。看看你的shared_ptr初始化。 – 2011-05-21 12:00:33