c++ - 围绕变量 `f` 尝试计算斐波那契 (n) 的堆栈损坏

标签 c++ stack stack-corruption

我正在尝试让我的程序打印第 n 个斐波那契数。
I get a stack-corruption-assertion though :

int f[] = { 1, 1 };
int i = 0;
if (n <= 2) {
    cout << "F(" << n << ") = 1" << endl;
    return 0;
}
if (n>2) {
    i = 2;
    while (i < n) {
        cout << "i =" << i << endl;
        cout << f[i - 1] << endl;
        cout << f[i - 2] << endl;
        f[i] = f[i - 1] + f[i - 2];
        i++;
    }
    cout << "F(" << n << ") = " << f[i-1] << endl;
    return 0;
}

最佳答案

原始数组不会按需增长,当 sie 不包含在类型中时,初始化程序用于静态调整它们的大小。
这两个是等价的,都定义了一个包含两个元素的数组:

int f[] = { 1, 1 };
int f[2] = { 1, 1 };

您要使用的是 std::vector 或手动动态重新分配(使用 mallocreallocfreenew[]delete[]std::copy)。

另一个(更好的)选项是观察这样一个事实,即您只需要前 2 个值来计算下一个值,并且只保存这些值。

关于c++ - 围绕变量 `f` 尝试计算斐波那契 (n) 的堆栈损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28384751/

相关文章:

c++ - 第一个 cout 语句末尾的空格显示在第二个 cout 的开头

C++如何接受服务器推送数据?

ruby - "Stack level too deep"在 Ruby 中带有 Ackermann 函数

loops - 我想从一波中产生的不同敌人的数量中随机化产生的敌人的继承。 (TD游戏),我该怎么做?

c++ - Lua:避免 pcall 和 Lua 调用堆栈重载

android - 由于 "stack corruption detected: aborted"导致崩溃

c++ - 寻找堆栈损坏错误的解释

c++ - 围绕标量初始值设定项错误的大括号

c++ - BER解码错误

windows - Microsoft Stack 是否始终与 16 字节对齐?