试图计算fibonacci(n)的变量“f”周围的堆栈损坏
Stack corruption around variable `f` trying to calculate fibonacci(n)
我正试图让我的程序打印第n个fibonacci数
不过,我得到了一个堆栈损坏断言:
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
或手动动态重新分配(使用malloc
、realloc
和free
或new[]
、delete[]
和std::copy
)。
另一个(优选的)选项是观察这样一个事实,即您只需要前两个值来计算下一个值,并且只保存这些值。
int f[] = {1, 1};
创建一个正好可以容纳两个整数的数组。因此,对于i > 1
,您无法写入或读取(甚至无法形成)f[i]
。虽然您可以使用std::vector
来保护递归的所有值,但这样计算级数会更有效:
int f[3] = {1, 1, 0};
for (int i = 1; i < n; ++i){
f[2] = f[0] + f[1];
f[0] = f[1];
f[1] = f[2];
}
重用不再需要的值的空间。
相关文章:
- 变量周围的堆栈'...'已损坏
- 运行时检查失败 #2 变量"A"周围的堆栈已损坏
- 运行时检查失败 #2 - 变量"e"周围的堆栈已损坏。发生
- 变量周围的堆栈'sortArray'已损坏
- 变量周围的堆栈'folderPath'已损坏
- 运行时检查失败 #2 - 变量周围的堆栈'...'已损坏
- 运行时检查失败 #2 - 变量"l1"周围的堆栈已损坏
- C++:此代码可以编译,但引发运行时检查失败 #2 - 围绕变量周围的堆栈'num'已损坏。发生
- 数组变量周围的堆栈已损坏
- 运行时检查失败 - 变量周围的堆栈已损坏
- 调试:运行时检查失败 #2 - 变量"LoggerThread"周围的堆栈已损坏
- 运行时检查失败 #2 - 变量周围的堆栈'k'已损坏
- 运行时检查失败 #2 - 变量"数字选择"周围的堆栈已损坏
- 数组问题:变量周围的堆栈'arr'已损坏
- 运行时间检查:变量周围的堆栈已损坏
- 变量周围的堆栈'Yarray'已损坏
- 变量"name"周围的堆栈已损坏C++
- 运行时检查失败#2 - 变量周围的堆栈'myArray'已损坏.- 似乎无法弄清楚如何删除此错误
- MS 工作室 17 变量周围的堆栈已损坏
- 将数据存储在char数组中导致变量周围损坏