【发布时间】:2014-08-18 01:23:33
【问题描述】:
我已经通过引用查找了传递向量,看起来我正在做的事情应该可行。我只为向量分配了 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 循环。 "another_function" 接受一个 int 值,如果满足某些条件则返回 true,并且每次都减小它的值。我在向量中只存储 3 个元素的情况下对其进行了测试,但仍然出现分段错误(核心转储)错误...
编辑:我还注释掉了results[i] = temp;,它运行良好。
【问题讨论】:
-
你怎么知道你没有注销结果的结尾?没有检查 i
-
如何将 temp 传递给 another_function()?通过参考还是通过价值?希望通过参考,但请确认。
-
好吧,我想我猜我想只用 3 个元素尝试它的大小不会接近...我添加了检查,我不再遇到分段错误,但没有元素存储在结果中...啊....向量的大小在模板化后会发生变化吗?
-
results.push_back(temp); -
是的@Oleg,它也是通过引用传递的。我不再遇到段错误,但没有存储任何元素。使用所有模板作为整数对其进行测试以保持一致性