【问题标题】:SEG FAULT while assigning memory to the pointer of vector of structs将内存分配给结构向量的指针时出现 SEG FAULT
【发布时间】:2012-11-14 23:36:33
【问题描述】:
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 错误....任何有关将内存分配给结构向量中的指针的替代方法的建议。

【问题讨论】:

  • 向量如何知道它应该包含 100 个元素?
  • 你的key最终会存储什么类型的数据?
  • @KerrekSB,天哪,我喜欢这个链接。现在很容易记住。
  • @KerrekSB:很有趣,因为在这种情况下是使用std::vector 导致了段错误......
  • @Anonymous - 问题是leaves[i] 不存在。到目前为止提供的两个答案解决了这个问题。

标签: c++ vector segmentation-fault std


【解决方案1】:

这是因为您试图分配给一个还没有元素的向量。改为这样做:

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
 }

这样您将访问实际内存。

在 cmets 中,OP 提到数组中元素的数量将在运行时决定。您可以设置i &lt; someVar,这将允许您在运行时决定someVar 和列表的大小。

另一个答案

leaves.resize(someVar) //before the loop

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

【讨论】:

    【解决方案2】:

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

    leaves.resize(100);
    

    在循环之前。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-12
      • 1970-01-01
      • 2018-05-16
      • 2021-12-26
      • 1970-01-01
      • 2013-01-21
      • 1970-01-01
      • 2020-03-09
      相关资源
      最近更新 更多