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
    }

}

在上面的 for 循环中执行 malloc 时,我收到此代码的 SEG FAULT 错误....有关将内存分配给结构向量中的指针的任何替代方法的任何建议。

4

2 回答 2

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

不过,这可能是一种更好的方法,因为它可能会更有效率。

于 2012-11-14T23:39:37.857 回答
2

您正在索引一个空向量。尝试使用

leaves.resize(100);

循环之前。

于 2012-11-14T23:40:27.427 回答