C++ 为什么std::map会引发异常?

C++ 为什么std::map会引发异常?,c++,visual-c++,map,g++,C++,Visual C++,Map,G++,我使用gpp和microsoft编译器运行这段代码,但在这两种情况下都出现了异常 但我不明白为什么! 这是我的代码: #include <iostream> #include <map> using namespace std; map<int,int> fib; int fibo(int i) { if (!fib.count(i)) { fib.insert(pair<int, int>(i,fibo(i-

我使用gpp和microsoft编译器运行这段代码,但在这两种情况下都出现了异常 但我不明白为什么! 这是我的代码:

#include <iostream>
#include <map>

using namespace std;

map<int,int> fib;

int fibo(int i)
{
    if (!fib.count(i))
    {
        fib.insert(pair<int, int>(i,fibo(i-1)+fibo(i-2)));
    }

    return fib[i];
}

int r(int i)
{
    if(i<3)
    {
        return i;
    }
    else
    {
        return fibo(i)+r(i-2);
    }
}

int main()
{


    fib.insert(pair<int, int>(0,1));
    fib.insert(pair<int, int>(1,1));

    int a,b,n;
    cin>>a>>b;

    n=b-a;

    int fiba=fibo(a);
    int fibaa=fibo(a-1);

    cout << (r(n+1)*fiba)+(r(n)*fibaa);

    return 0;
}
#包括
#包括
使用名称空间std;
map-fib;
int fibo(int i)
{
如果(!纤维计数(i))
{
fib.插入物(对(i,fibo(i-1)+fibo(i-2));
}
返回fib[i];
}
INTR(INTI)
{
如果(i>a>>b;
n=b-a;
int fiba=fibo(a);
int-fibaa=fibo(a-1);

您是否尝试输入一些负数?您没有对传递到程序的输入进行任何检查,并且

return fib[i];

如果尝试访问不存在的位置,您将收到一个错误。

我在运行代码时遇到堆栈溢出异常,显然是因为递归太深。
您应该增加堆栈大小(但以后可以选择输入更大的数字并再次获得相同的异常),或者将此算法转换为非递归算法(例如,请参见此算法:)

什么是例外情况?在哪里?@DavidSchwartz:输入是1000000和2000000@PaulManta:有了这些输入,我得到了exception@Fox32:VC++2010没有显示出来!@Ahmadalishafie您的代码设计的伸缩性并不接近于此。尝试合理的输入,您可能会得到合理的输出。(或者切换到迭代算法,而不是递归算法。)我编辑我的代码并添加一些负数检查,但我没有看到任何异常的变化!但是我想要Fibonacci用动态编程算法!然后寻找编译器特定的方法来增加堆栈大小和捕获堆栈溢出异常,为用户提供有意义的消息。例如对于VisualC++来说,默认堆栈大小只有1MB(见图:)。对于您的数字,我建议从几百兆字节开始(因为您希望堆栈中有2个mln调用)@Ahmadalishafie:这个问题也可以在循环中解决,而不是使用递归。那么您的调用堆栈大小就不必担心了。