首页 > 解决方案 > 为什么我会因此遇到分段错误?

问题描述

我只想创建一个简单的 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;

}

标签: c++

解决方案


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

您必须在使用前创建元素或使用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;
}

推荐阅读