2012-04-28 180 views
1

我在我的代碼中使用了Vectors。C++中的向量初始化

,導致該錯誤的行如下所示:

vector<Node> alt_seq ; 
alt_seq = vector<Node>(1000); 
for(int j=0; j<alt_cf.getNoOfNodes(i); j++) 
{ 
    Node temp_node = *alt_itr; 
    alt_itr++; 
    alt_seq.push_back(temp_node); 
    } 

線:

alt_seq.push_back(temp_node); 

導致運行時錯誤。但是,如果我初始化一些初始大小的矢量如下:

vector<Node> alt_seq(1000) ; 

在這種情況下代碼工作正常。 但是我不想給出初始大小,因爲矢量中的對象數量在運行時將是可變的。 請幫幫我。我是新的C++。

供您參考完整的方法函數是在這裏:

http://pastebin.com/2dUFEui5

+1

看起來像類節點的三大實現問題。你能告訴我們「節點」的定義嗎? – dirkgently 2012-04-28 21:22:27

+1

'vector alt_seq(1000)'將在向量中構造1000個'Node'對象,這與不指定計數不同。你的'push_back'問題聽起來像是'Node'的賦值/拷貝構造函數的一個可能的問題。你能展示這個類的聲明和定義嗎? – birryree 2012-04-28 21:23:07

+0

順便說一句,pastebin鏈接也沒有類節點的定義。 – dirkgently 2012-04-28 21:25:08

回答

3

Node類有一個名爲cfragCombinedFragment*類型的指針成員。如果您未定義自己的副本和賦值運算符,則會創建懸掛引用。另外,如果Node負責分配/解除分配cfrag,則需要合適的分流器來防止泄漏。如果您不想深度複製CombinedFragment,則可以使用shared_ptr

此外,Node的默認ctor可能不需要在那裏(它將cfrag保留爲未初始化狀態)。

+0

謝謝我會嘗試...如果你想看項目中的其他課程,代碼可以在GitHub https://github.com/abhinavarora/mbt – 2012-04-28 21:33:29

+1

@AbhinavArora:嘗試添加合適的大三,並返回,如果沒有'解決你的問題! – dirkgently 2012-04-28 21:35:05

+0

正如你所說,我增加了三大如下http://pastebin.com/g2n14awz請讓我知道,如果這種補充是正確的。儘管進行了上述更改,但它仍然會導致運行時錯誤。請幫忙。我無法理解我的錯誤。 – 2012-04-28 22:02:19

0

我可以看到一個問題;當你聲明1000 vector對象,然後做一個push_back你要添加到向量的末尾,即你想添加的對象是在1001,1002 ....等。如果聲明1000 vector對象doesn' t給你一個運行時錯誤,我首先會看到什麼是默認定義(因爲前1000個節點對象有默認值),因爲這沒有錯誤,並與我試圖加載的實際數據進行比較。希望這可以幫助。