uva-408.exe中0x00945BA9处的未处理异常:0xC00000FD:堆栈溢出(参数:0x00000001,0x00092FC4)

时间:2015-12-04 14:21:21

标签: c++ stack-overflow unhandled-exception

当此程序使用输入63923 99999运行时, 它停止给出标题信息。 任何人请帮我弄清楚我的代码是做错了什么。 用一些断言插入检查后 甚至做调试我无法弄清楚这段代码的问题。 这是我的代码:

    #define _CRT_SECURE_NO_WARNINGS 
    #include<cstdio>
    #include<vector>
    #include<iostream>
    #include<string>
    using namespace std;
    #define ll long long
    #define f(t,i,s,r) for(t i=s;i<r;i++)
    ll s, m;
    vector<ll>v;
    string g="     Good Choice", b="     Bad Choice";
    bool update (ll x,ll count) {
        if (count < m) {
              x = (x + s) % m;
            if (v[x] == 1) {
                return false;
            }
            else {
                v[x] = 1;
                return update (x, count+1);
            }
        }
        else {
            f (ll,i, 0, m) {
                if (v[i] == 0)return false;
            }
            return true;
        }
    }
    int main () {
        freopen ("i.txt","r",stdin);
        while (cin>>s>>m)
        {
            v.clear ();
            v.resize (m,0);
            v[0] = 1;
            if (update (0, 1) == true) {
                printf ("%10lld%10lld%s\n",s,m,g.c_str());
            }
            else {
                printf ("%10lld%10lld%s\n", s, m,b.c_str());
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

请在发布代码供其他人查看时,对其进行去混淆!

看起来,如果选择了数字,模数运算就不会足够早地将数字循环到您已经看过的数字上,并且您的递归过于深入,无法处理堆栈。

该算法应该可以简单地从递归转换为迭代。