PDA

View Full Version : ٍطزثحفهخد:An unhandled exception of type 'System.StackOverflowException' occurred in System.Data.dll



resident
دوشنبه 06 اسفند 1386, 22:33 عصر
سلام.
من یه کلاسی دارم که تقریبا تو همه فرمها و کلاسهای دیگه از اون استفاده کردم.
به تازگی وقتی میخوام یکی از فرمهامواجرا کنم تو یکی از خطهای اون کلاس که دیتاتیبل رو new کردم Exception زیر رخ میده:

An unhandled exception of type 'System.StackOverflowException' occurred in System.Data.dll
مشکل کجاست؟ ممنون میشم سریعتر راهنماییم کنید.
متشکرم.

Mahdi.Kiani
دوشنبه 06 اسفند 1386, 23:06 عصر
سلام.
من یه کلاسی دارم که تقریبا تو همه فرمها و کلاسهای دیگه از اون استفاده کردم.
به تازگی وقتی میخوام یکی از فرمهامواجرا کنم تو یکی از خطهای اون کلاس که دیتاتیبل رو new کردم Exception زیر رخ میده:

An unhandled exception of type 'System.StackOverflowException' occurred in System.Data.dll
مشکل کجاست؟ ممنون میشم سریعتر راهنماییم کنید.
متشکرم.

به اختمال زیاد در ساخت آبجکت ها، درون کلاس های مختلف ، یک حلقه بی نهایت تشکیل میشه
در واقع تولید آبجکت ها به صورت چرخشی

به عنوان مثال فرض کنید 2 تا کلاس دارین به صورت زیر




class Class1
{
public Class1()
{
new Class2();
}
}








class Class2
{
public Class2()
{
new Class1();
}
}




حالا به محضی که کد زیر را در جایی داشته باشین



new Class1();


همون مشکلی که گفتین پیش خواهد آمد

موفق باشید

Mahdi.Kiani
دوشنبه 06 اسفند 1386, 23:14 عصر
برای درک بهتر به عکس زیر توجه کن






http://aycu01.webshots.com/image/45160/2001221631339733216_rs.jpg



فکر نکنم نیاز به گفتن باشه که اگر کلاس main نمونه ای از class2 به جای class1 هم بسازه باز همین داستان اتفاق میفته

پ و
نقاشیم حرف نداره ها!!! :لبخند:

موفق باشید

resident
دوشنبه 06 اسفند 1386, 23:31 عصر
مشکلم این بود که به اشتباه داخل یکی از کلاسهام ، یک نمونه از خود اون کلاس ایجاد کرده بودم. و با حذف اون مشکلم حل شد.

moongairl
شنبه 17 تیر 1391, 23:00 عصر
با سلام
من هم همین مشکل رو دارم
نمیدونم اشکالم از کجاست
ممنون میشم کمکم کنید

public int integerpower(int num1, int num2)
{

if (num1 == 0)
return 1;
else
{
return integerpower(num1, num2 - 1) * num1;
}

}

private void button1_Click(object sender, EventArgs e)
{
label1.Text = "";
int Base = Convert.ToInt32(textBox1.Text);
int exponent = Convert.ToInt32(textBox2.Text);
int javab = integerpower(Base, exponent);
label1.Text = Convert.ToString(javab);

}

gwbasic
یک شنبه 18 تیر 1391, 00:30 صبح
با سلام
من هم همین مشکل رو دارم
نمیدونم اشکالم از کجاست
ممنون میشم کمکم کنید

public int integerpower(int num1, int num2)
{

if (num1 == 0)
return 1;
else
{
return integerpower(num1, num2 - 1) * num1;
}

}

private void button1_Click(object sender, EventArgs e)
{
label1.Text = "";
int Base = Convert.ToInt32(textBox1.Text);
int exponent = Convert.ToInt32(textBox2.Text);
int javab = integerpower(Base, exponent);
label1.Text = Convert.ToString(javab);

}

ممنون از اینکه اول جستجو کردید بعد سوال خودتون رو مطرح کردین!
این خطا نشون دهنده یک حلقه بی پایان هست در کد بنابراین اگر دقت کنید متد recursive‌ ای که نوشتید هیچگاه شرط خاتمه ای که در ابتدا چک می کنید اجرا نخواهد شد! در داخل متد integerpower شما مقدار num1 رو چک میکنید که اگر مساوی 0 بوذد تمام و در غیر این صورت دوباره با همان مقدار num1 اون رو صدا می زنید بنابراین هیچ وقت این مقدار صفر نخواهد شد و درنتیجه این متد پایانی ندارند
اینطور که از نام متد مشخصه محاسبه توان هست بنابراین جای num1 در شرط از num2‌استفاده کنید چون توان درحال کم شدن هست