c++ - 为什么我会因此遇到分段错误?
问题描述
我只想创建一个简单的 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;
}
解决方案
这是因为您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;
}
推荐阅读
- xamarin - 如果调用 ExecuteQuerySegmentedAsync,则不填充 xamarin 控件的对象列表
- r - 在 imageR 包中查找最大轮廓并应用蒙版
- python - MAC Jupyter Notebook add Graphviz to Path, Graphviz ExecutableNotFound: How to add Graphviz to path?
- excel - 将值从多张纸复制到一张纸
- python - Django PK 到 slugfield
- neo4j - Neo4j - 基于节点属性的聚合计算和设置节点属性
- python-3.x - Jupyter Notebook 连接远程 Oracle 数据库的系统配置
- swift - 接收 ITMS-9089:“冗余二进制上传。您已经上传了版本号为 2.0 的版本 1.0。”
- c++ - 在 Turbo C++ 鼠标程序中无法绘制像素
- github - 使用连接到 github 的 Azure DevOps,如何设置在主分支发生更改时发生的自动构建?