我不断收到细分错误错误。我试图使用户类型为整数,并返回向量中总和的索引。请帮助
#include <iostream>
#include <vector>
#include <string>
using namespace std;
void print (const vector<int> *result) {
cout << "[";
for (int i {0};i<(*result).size();++i) {
cout << (*result).at(i) + " ";
}
cout << "]" << endl;
}
vector<int> *method(const vector<int> *vec,int value) {
vector<int> *newvec {nullptr};
bool done {false};
int i = (*vec).size()-1;
while (!done && i >= 0) {
if (value >= (*vec).at(i)) {
value -= (*vec).at(i);
(*newvec).push_back(i);
}
if (value == 0) {
cout << "done" << endl;
done = true;
} else {
--i;
}
}
return newvec;
}
int main()
{
vector<int> v;
int Numbers;
cout << "Enter a list of numbers (put spaces inbetween): ";
while (cin >> Numbers && Numbers != -1) {
v.push_back(Numbers);
}
cout << endl;
int number {};
cout << "Enter a number: ";
cin >> number;
cout << endl;
vector<int> *results = method(&v,number);
print(results);
//del results;
return 0;
}
我不太清楚为什么,但是细分错误不断出现。我对逻辑不了解吗?我相信它涉及到指针,但是不太确定。
答案 0 :(得分:2)
vector * newvec永远不会创建为矢量,因此它只是指向矢量的指针,然后将其用于插入值。
在这种情况下最好不要使用指针,而应返回/使用对对象的引用。
即:
2.0.0-rc5
并对其他函数调用和main函数执行类似操作。
答案 1 :(得分:1)
vector<int> *newvec {nullptr};
在这里您将创建一个空指针。
然后尝试取消引用它,并使用它指向的向量,该向量不存在。
您必须实际创建向量。
通常,我建议您摆脱所有这些指针;您不需要它们,并且您已经发现它们使您的代码更复杂和更容易出错。
只需以通常的方式创建漂亮的法线向量即可。