c++ - deque 在 128 次迭代后抛出 Segfault

标签 c++ deque

我不知道为什么这个函数在 n >= 128 时输出 Segmentation fault

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

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

我只想知道为什么会出现段错误?我错过了什么吗?这是我第一次处理 deque 顺便说一句。

#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 ()

最佳答案

您用 4 个元素初始化 sum 并且不再添加任何元素。但是你在 n-2 次循环中执行 sum.pop_front() 。您可以使用 n 元素初始化 sumpush_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];

关于c++ - deque 在 128 次迭代后抛出 Segfault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44549996/

相关文章:

c++ - Boost.Iostreams 与 iostream/streambuf 重载比特流 I/O

c++ - 错误 : invalid operands of types '<unresolved overloaded function type>' and 'int' to binary 'operator>' if(min > max)

python - 子类化双端队列时如何设置 maxlen

C++ Std 队列和 vector 性能

python - 值错误: need more than one value to unpack

java - 双端队列

c++ - Windows 服务问题(C++、WinAPI)

c++ - 为什么 std::deque 不是在索引 0 之前保留内存的 vector ?

c++ - 如何读取 .obj 文件?

python - 可以扩展 collections.deque 以构建 "file buffer"吗?