我不知道为什么这个函数在 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
元素初始化 sum
或 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];
关于c++ - deque 在 128 次迭代后抛出 Segfault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44549996/