通过引用传递矢量-分割错误c++

Passing Vector by Reference- Segmentation Fault C++

本文关键字:分割 错误 c++ 引用      更新时间:2023-10-16

我已经通过引用查找了传递向量,似乎我正在做的事情应该起作用。我测试了这一点,只给向量分配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;,它工作得很好

通过引用传递向量有效。这是事实:)在这种情况下不起作用的是,你不能保证你的索引不会超过向量的末尾。您的代码必须保证每次执行

results[i] = temp;

, I总是小于results.size().

除非您为vector预留了足够的容量,否则您应该使用push_back

替换行

results[i] = temp;

results.push_back(temp);