【问题标题】:Why do I get a segmentation fault for this?为什么我会因此遇到分段错误?
【发布时间】:2021-10-19 18:44:32
【问题描述】:

我只想创建一个简单的 C++ 结构,它有一个 int 索引和一个 int grayValue 。函数被赋予带有灰度值的向量。当我尝试编译它时出现分段错误,有人知道为什么吗? (未对向量进行排序)谢谢。

vector<gray> createStruct( vector<int> grayValues)
{
   vector <gray> grayStruct;
     for (int i = 0; i<grayValues.size();i++)
      {
         grayStruct[i].originalIndex= i;
         grayStruct[i].grayValue= grayValues[i];
     }

     return grayStruct;
}



int main() {

  vector <int> grayVals={411,21,78,23};
  vector <gray> grayStruct=createStruct(grayVals);
//  sort(grayStruct);

  for (int i = 0; i < grayStruct.size(); i++)
      {cout << grayStruct[i].originalIndex<<' '<<grayStruct[i].grayValue;
      cout<<endl;
    }
return 0;

}

【问题讨论】:

  • 哦,这是 struct ,对不起: struct gray { int originalIndex;整数灰度值; };
  • 您永远不会调整 grayStruct 的大小,因此行为未定义。
  • @G.M.调整大小是什么意思?
  • 它是用大小 0 创建的,您不执行任何会改变其大小的操作(请参阅@MikeCAT 的答案)。

标签: c++


【解决方案1】:

这是因为你在函数createStruct中使用了grayStruct的元素,实际上并不存在。

使用前必须创建元素或使用push_back()创建元素。

通过构造函数创建元素:

vector<gray> createStruct( vector<int> grayValues)
{
   vector <gray> grayStruct(grayValues.size()); // add number of elements to create
     for (int i = 0; i<grayValues.size();i++)
      {
         grayStruct[i].originalIndex= i;
         grayStruct[i].grayValue= grayValues[i];
     }

     return grayStruct;
}

通过resize()创建元素:

vector<gray> createStruct( vector<int> grayValues)
{
   vector <gray> grayStruct;
   grayStruct.resize(grayValues.size()); // create elements
     for (int i = 0; i<grayValues.size();i++)
      {
         grayStruct[i].originalIndex= i;
         grayStruct[i].grayValue= grayValues[i];
     }

     return grayStruct;
}

通过push_back()逐一添加元素:

vector<gray> createStruct( vector<int> grayValues)
{
   vector <gray> grayStruct;
     for (int i = 0; i<grayValues.size();i++)
      {
         gray value;
         value.originalIndex= i;
         value.grayValue= grayValues[i];
         grayStruct.push_back(value); // add an element
     }

     return grayStruct;
}

【讨论】:

  • 哦,是的,我怎么没注意到,非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-03
  • 2020-08-03
  • 2020-08-03
  • 2013-01-23
相关资源
最近更新 更多