deque在128次迭代后抛出Segfault

时间:2017-06-14 16:20:59

标签: c++ deque

我不清楚为什么此功能在Segmentation fault

时会输出n >= 128

显然,这应该处理long long n以输出第一个n斐波纳契数的总和的最后一位数。

我不要求解决方案,我知道有其他选择!

我想知道的是为什么Segfault?我错过了什么吗?这是我第一次处理deque btw。

#include <iostream>
#include <deque>

using namespace std;

int fibonacci_sum_deque(long long n) {
  if (n <= 2)
    return n;

  deque<int> sum(4);
  sum[0] = 0;
  sum[1] = 1;
  sum[2] = 2;

  for (long long i = 3; i <= n; ++i) {
    sum[3] = (sum[2] + sum[1] + 1) % 10;
    sum.pop_front();
  }

  return sum[2];
}

int main() {
    long long n = 0;
    cin >> n;
    cout << fibonacci_sum_deque(n);
}

gdb输出:

Program received signal SIGSEGV, Segmentation fault.
0x0000000000401861 in fibonacci_sum_deque(long long) ()
(gdb) where
#0  0x0000000000401861 in fibonacci_sum_deque(long long) ()
#1  0x000000000040342d in main ()

1 个答案:

答案 0 :(得分:3)

您使用4个元素初始化sum,不再添加任何内容。但是你在sum.pop_front()次循环中n-2。您可以使用sum元素初始化n,也可以使用push_back这样的新元素进行初始化:

deque<int> sum(3);
sum[0] = 0;
sum[1] = 1;
sum[2] = 2;
for (long long i = 3; i <= n; ++i) {
    sum.push_back((sum[2] + sum[1] + 1) % 10);
    sum.pop_front();
}
return sum[2];