我的C#程序中有一个错误,导致堆栈溢出异常

我的C#程序中有一个错误,导致堆栈溢出异常,c#,C#,我有两张表格。其中之一是一个表单,用户可以选择一个学校班级,然后单击“确定”。我用 公共整数[]梯度类=新整数[2] 保存已选择的学校班级。(类列表是组合框) 在那之后,我打开另一个新表格来编辑那个班学生的信息。 我使用这样的开关: switch(grad_class) { case "11": something to do..., break; case "12": something to do..., break; } public form1() { var f2

我有两张表格。其中之一是一个表单,用户可以选择一个学校班级,然后单击“确定”。我用

公共整数[]梯度类=新整数[2]

保存已选择的学校班级。(类列表是组合框) 在那之后,我打开另一个新表格来编辑那个班学生的信息。 我使用这样的开关:

switch(grad_class)
{
   case "11": something to do..., break;
   case "12": something to do..., break;
}
public form1() {
    var f2 = new form2();
}

public form2() {
    var f1 = new form1();
}
但我的问题是: 我在表1中定义了“毕业班”。因此,当我想使用它时,我必须这样做:

form1 f1 = new form1();
f1.grade_class;
在2号表格中,我称之为代码。 在表格1中,我呼吁:

form2 f2 = new form2();    
发生堆栈溢出异常

您声明:

form1 f1 = new form1();
f1.grade_class;
在2号表格中,我称之为代码。在表格1中,我呼吁:

form2 f2 = new form2();    
这就是你的问题。您声明在
form1
中调用
form2.ctor
,在
form2
中调用
form1.ctor
。因此,您的代码如下所示:

switch(grad_class)
{
   case "11": something to do..., break;
   case "12": something to do..., break;
}
public form1() {
    var f2 = new form2();
}

public form2() {
    var f1 = new form1();
}
当然,这会导致堆栈溢出。这些是相互递归的函数。您没有返回条件,因此耗尽了堆栈空间。很简单,所发生的事情是,当一个方法完成时,机器必须存储关于下一步要去哪里的状态。它通常将这些信息存储在称为堆栈的空间中。但是,堆栈是有边界的,因此如果通过反复调用方法将太多“this is to next”块推到堆栈上,则会耗尽此堆栈空间并出现臭名昭著的堆栈溢出异常

编辑:你说:

namespace TeacherBook {
    public partial class ChooseGrade : Form {
        public int[] grad_class=new int[2]; //int array for grade & class (first for Grade,second for class) 
        EditStudent StdForm = new EditStudent();
    }
namespace TeacherBook {
    public partial class EditStudent : Form {
        ChooseGrade ChGrade = new ChooseGrade(); // define form 
    }
}

实际上是我所怀疑的。在
ChooseGrade
中有一个字段初始值设定项,它实例化了
EditStudent
的一个新实例。但是
EditStudent
有一个字段初始值设定项,用于实例化
ChooseGrade
的新实例。因此,当您实例化
ChooseGrade
的新实例时,这会导致调用
editsudent
的构造函数,这会导致调用
ChooseGrade
的构造函数,这会导致调用
editsudent
的构造函数,一直到堆栈溢出。

form2的构造函数是什么样子的?显示form2构造函数的代码。关于StackOverflow上的堆栈溢出的问题?我想我自己的堆栈溢出了。显然
form2
的构造函数中有问题。您还有一个严重的设计问题,这使得您很难对程序进行推理。请阅读,帮助我们,帮助你。你被什么弄糊涂了?嗯,这并没有告诉我你被什么弄糊涂了,但好吧,我会跟你玩的。消除相互递归。这些形式相互包含是没有意义的。