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错误....任何建议任何替代方式为结构向量中的指针分配内存。
答案 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);
在循环之前。