为啥我会因此遇到分段错误?
Posted
技术标签:
【中文标题】为啥我会因此遇到分段错误?【英文标题】:Why do I get a segmentation fault for this?为什么我会因此遇到分段错误? 【发布时间】:2021-03-02 13:37:00 【问题描述】:我只想创建一个简单的 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 的答案)。
【参考方案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;
【讨论】:
哦,是的,我怎么没注意到,非常感谢以上是关于为啥我会因此遇到分段错误?的主要内容,如果未能解决你的问题,请参考以下文章