2011-05-21 279 views
0

我遇到了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」。怎麼了 ?

+7

除了其他任何名稱'__elevi'在C++用戶代碼中是非法的,所有包含雙下劃線或以下劃線和大寫字母開頭的名稱都是非法的。您還需要發佈調用您的函數的代碼,並調查引用的概念。 – 2011-05-21 11:58:19

+0

請使用文本編輯器中的「{}」按鈕來格式化您的代碼。當你的問題*可讀*時,你會得到更好的答案。 – jalf 2011-05-21 11:59:21

+0

是的,沒有什麼奇怪的。看看你的shared_ptr初始化。 – 2011-05-21 12:00:33

回答

1

傳遞給adaugaElev的高電平對象很可能未被分配,或者以某種方式未分配(引用計數在shared_ptr中爲零) - 您需要發佈更多代碼,以顯示如何分配Elev對象以確認這一點。

0

valgrind下運行您的程序 - 這將有助於說明問題出在哪裏。

+2

思考是一個更好的解決方案。 – 2011-05-21 14:18:01

-1

在C++中使用雙下劃線前綴名是未定義的行爲。另外,Elev可能因各種原因被搗毀,我會追查它的起源。

+0

那麼,不完全沒有定義的行爲... – 2011-05-21 14:49:37

+0

其實,我很確定它實際上是未定義的行爲。 – Puppy 2012-08-26 10:46:24

相關問題