为什么我会因此而出现分段错误? < >我只想创建一个简单的C++结构,它有int索引和int GalayValk。函数被赋予了带有灰度值的向量。当我试图编译它时,我遇到了一个分段错误,有人知道为什么吗?(没有对向量排序)谢谢 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; } vector createStruct(矢量灰度值) { 向量灰色结构; 对于(int i=0;i

为什么我会因此而出现分段错误? < >我只想创建一个简单的C++结构,它有int索引和int GalayValk。函数被赋予了带有灰度值的向量。当我试图编译它时,我遇到了一个分段错误,有人知道为什么吗?(没有对向量排序)谢谢 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; } vector createStruct(矢量灰度值) { 向量灰色结构; 对于(int i=0;i,c++,C++,这是因为您在函数createStruct中使用的是grayStruct的元素,而该元素实际上并不存在 您必须在使用前创建元素,或者使用push_back()创建元素 通过构造函数创建元素: vector<gray> createStruct( vector<int> grayValues) { vector <gray> grayStruct(grayValues.size()); // add number of elements to create

这是因为您在函数
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;
}
通过
push_back()
逐个添加元素:

vector createStruct(矢量灰度值)
{
向量灰色结构;

对于(int i=0;i这是因为您在函数
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;
}
通过
push_back()
逐个添加元素:

vector createStruct(矢量灰度值)
{
向量灰色结构;

对于(int i=0;ioh,这是结构,抱歉:struct gray{int originalIndex;int grayValue;};您从不调整
grayStruct
,因此行为未定义。@G.M.您是什么意思?它是用大小0创建的,您不会执行任何更改其大小的操作(请参见@MikeCAT的答案)。噢,这是结构,对不起:struct gray{int originalIndex;int grayValue;};您从不调整
grayStruct
,因此行为未定义。@G.M.您是什么意思?它是用大小0创建的,您不会执行任何更改其大小的操作(请参见@MikeCAT的答案)哦,是的,我怎么没注意到,非常感谢哦,是的,我怎么没注意到,非常感谢
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;
}