2012-11-14 27 views
1
struct LeafDataEntry 
{ 
    void *key; 
    int a; 
}; 


int main(){ 

    //I want to declare a vector of structure 
    vector<LeafDataEntry> leaves; 

    for(int i=0; i<100; i++){ 
     leaves[i].key = (void *)malloc(sizeof(unsigned)); 
     //assign some value to leaves[i].key using memcpy 
    } 

} 

我在爲上面的循環執行malloc時出現此代碼的SEG FAULT錯誤....任何有關將指針分配給指針的替代方法的任何建議在結構的向量中。SEG FAULT同時將內存分配給結構向量的指針

+2

該矢量應該如何知道它應該包含100個元素? – chris

+0

什麼是你的'key'將最終存儲什麼類型的數據? –

+0

@KerrekSB,Omg我喜歡這個鏈接。現在很容易記住。 – chris

回答

5

這是因爲你試圖分配給一個沒有元素的矢量。改爲:

for(int i=0; i<100; i++){ 
    LeafDataEntry temp; 
    leaves.push_back(temp); 
    leaves[i].key = (void *)malloc(sizeof(unsigned)); 
    //assign some value to leaves[i].key using memcpy 
} 

這樣你將訪問實際的內存。

在OP的評論中提到,數組中元素的數量將在運行時決定。您可以設置i < someVar,這將允許您在運行時決定someVar和列表大小。

對方回答

leaves.resize(someVar) //before the loop 

可能是一個更好的方式去,但因爲很可能,這將是更有效的。

+0

感謝您的詳細回覆。它的工作:) – ASingh

+0

@匿名沒問題,你可以標記答案是正確的! –

2

您正在索引一個空向量。嘗試使用

leaves.resize(100); 

循環之前。

相關問題