首页 新闻 会员 周边

未处理的“System.StackOverflowException”类型的异常出现在 mscorlib.dll 中。

-1
悬赏园豆:5 [已关闭问题] 关闭于 2010-12-16 16:04

我有如下代码

   string charAdd = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
        string[] qqcharAdd = charAdd.Split(',');

        int temp = -1;
        string VUmn = "";
        Random random = new Random();
        for (int i = 0; i < n + 1; i++)
        {
            if (temp != -1)
            {
                random = new Random(i * temp * unchecked((int)DateTime.Now.Ticks));
            }
            int t = random.Next(qqcharAdd.Length);
            if (temp != -1 && temp != t)
            {
                return RandComd(n);
            }
            temp = t;
            VUmn += qqcharAdd[t];

        }
        return VUmn;

 老是报未处理的“System.StackOverflowException”类型的异常出现在 mscorlib.dll 中。

请问各位大侠,是为什么啊?

问题补充: public static string RandComd(int n) { string charAdd = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"; string[] qqcharAdd = charAdd.Split(','); int temp = -1; string VUmn = ""; Random random = new Random(); for (int i = 0; i < n + 1; i++) { if (temp != -1) { random = new Random(i * temp * unchecked((int)DateTime.Now.Ticks)); } int t = random.Next(qqcharAdd.Length); if (temp != -1 && temp != t) { return RandComd(n); } temp = t; VUmn += qqcharAdd[t]; } return VUmn; }
後浪的主页 後浪 | 小虾三级 | 园豆:830
提问于:2010-12-09 16:48
< >
分享
所有回答(3)
0

堆栈溢出、程序没有终止条件,陷入了死循环或者无限递归了。

HUHU慈悲 | 园豆:9973 (大侠五级) | 2010-12-09 17:10
-1

光你贴的这段代码不可能造成堆栈溢出的,你肯定是递归调用了,你在检查检查你的代码

eaglet | 园豆:17139 (专家六级) | 2010-12-09 17:45
我就只是写这个生成验证码的代码啊 并没有写其他的代码了啊, string[] qqcharAdd = charAdd.Split(','); 这句报错!
支持(0) 反对(0) 後浪 | 园豆:830 (小虾三级) | 2010-12-09 18:31
你这个函数里面分明进行了递归调用RandComd 中调用了RandComd,在 charAdd.Split(','); 这句出错是因为递归到这句后堆栈不够用了。如果你的逻辑确实需要递归这么多层,那要么你扩大堆栈的大小,要么你用其它的逻辑取代这个递归调用,比如用过辅助堆栈来取代递归。
支持(0) 反对(0) eaglet | 园豆:17139 (专家六级) | 2010-12-11 12:59
-1

n 的来源不断变化吧,代码中没有看到n的定义。

沉默的糕点 | 园豆:1786 (小虾三级) | 2010-12-09 20:16
public static string RandComd(int n) { string charAdd = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"; string[] qqcharAdd = charAdd.Split(','); int temp = -1; string VUmn = ""; Random random = new Random(); for (int i = 0; i < n + 1; i++) { if (temp != -1) { random = new Random(i * temp * unchecked((int)DateTime.Now.Ticks)); } int t = random.Next(qqcharAdd.Length); if (temp != -1 && temp != t) { return RandComd(n); } temp = t; VUmn += qqcharAdd[t]; } return VUmn; }
支持(0) 反对(0) 後浪 | 园豆:830 (小虾三级) | 2010-12-10 09:35
问题处在那个递归调用 return RandCom(n) 当你再次进入这个函数的时候,temp 永远都是-1,因此不断产生递归,也就是你永远都是当i=0的时候,就开始递归。
支持(0) 反对(0) 沉默的糕点 | 园豆:1786 (小虾三级) | 2010-12-10 09:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册