我通过引用查找传递向量,看起来我正在做的事应该起作用。我测试了这个,只在向量中分配了1个值,但我仍然遇到了分段错误。任何帮助或想法为什么会发生这种情况将非常感激。
伪码:
template <class X>
void class<X>::function(const X &A, const X &B, vector<X>&results) const {
int temp = A;
int i = 0;
while (temp > B){
if(another_function(temp)){
results[i] = temp;
i++;
}
}
}
基本上,A总是大于B,所以每次都会出现while循环。 &#34; another_function&#34;获取一个int值,如果满足某些条件则返回true,并且每次都减小其值。我测试了它只能在向量中存储3个元素,并且仍然出现分段错误(核心转储)错误......
编辑:我还评论了results[i] = temp;
,但效果很好。
答案 0 :(得分:2)
通过引用传递向量。这是事实 :) 在你的情况下不起作用的是你不能保证你没有索引超过向量的末尾。 您的代码必须保证每次都
results[i] = temp;
,我总是小于results.size()。
答案 1 :(得分:0)
除非您为vector
预留了足够的容量,否则应使用push_back
。
替换
行results[i] = temp;
通过
results.push_back(temp);