SEG FAULT,同时将内存分配给结构向量的指针

时间:2012-11-14 23:36:34

标签: c++ vector segmentation-fault std

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
    }

}

我在执行上面的for循环中的malloc时遇到此代码的SEG FAULT错误....任何建议任何替代方式为结构向量中的指针分配内存。

2 个答案:

答案 0 :(得分: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

可能是一种更好的方式,因为它可能更有效率。

答案 1 :(得分:2)

您正在为空矢量建立索引。尝试使用

leaves.resize(100);

在循环之前。