我正在学习如何在C++中创建引用变量,在使用int &res = f[k]
将res
创建为引用向量f
的给定分量的变量时遇到了一些麻烦。
在这段代码中,F(k)
应该返回整数输入k
的斐波那契数,该数是通过记忆向量f
中的先前调用F(0)
、F(1)
、... F(k-2)
和F(k-1)
计算出来的,但我得到了一个Segmentation Fault
,这让我认为我没有将res
作为向量f
的一个分量引用。
下面是我的代码:
#include <iostream>
#include <vector>
using namespace std;
const int UNDEF = -1;
vector<int> f;
int F(int k) {
int &res = f[k]; // I get "res: 0x0000000000000004 and &res: ??" when debugging
if (res != UNDEF) return res; // EXC_BAD_ACCESS (code=1, address=0x4)
if (k <= 1) return 1;
return res = F(k-1) + F(k-2);
}
int main() {
int k;
cin >> k;
vector<int> f(k+1, UNDEF);
cout << F(k) << endl;
}
我真的需要一些帮助!非常感谢:)
阿莱克斯
2条答案
按热度按时间4ioopgfo1#
全局向量变量
f
* 没有元素 *。当您写入:您试图访问它的
k
元素,但该元素并不存在,这就是为什么您会在该点出现分段错误。注意在你的程序中有两个同名的向量变量
f
,其中一个是局部变量,另一个是全局变量。当你写
所选择的向量
f
是全局变量,并且由于全局向量f
的大小为0(空向量),因此当您尝试访问其第k
个元素时,它会给您分段错误(未定义行为),如here所示。9fkzdhlc2#
非常感谢!我得到了一个答案,后来被删除,但这是最简单的解决方案: