PDA

View Full Version : سوال: خطا Stack Over Flow



mohan21
دوشنبه 25 مهر 1390, 23:56 عصر
سلام

من برنامه ایی مانند زیر دارم که تابع S شروع کننده هست::



private void S()
{
M();
}

private void R()
{
// .......
}

private void M()
{
// .......
// D();
// or
// F();
// or
// Q();
}

private void D()
{
// .......
R();
M();
}

private void F()
{
// .......
R();
M();
}

private void Q()
{
// .......
// End
}

بعد از چند ثانیه بدلیل فراخوانی های متعدد تایع M دچار مشکل Stack Over Flow میشه، حال برای رفع این مشکل و اجرای کامل برنامه چکار باید کرد؟

محاسبات زیاد هست برای همین باید بین توابع رفت و برگشت ...

پیغامی که نمایش داده می شود.


An unhandled exception of type 'System.StackOverflowException' occurred in test.exe

مرتضی تقدمی
سه شنبه 26 مهر 1390, 00:12 صبح
سلام
مگه محاسبات شما چقدره؟! این خطا به دلیل پر شدن پشته مربوط به فراخوانی هاست که شما چون خیلی تعداد صدا زدن هاتون زیاده این خطا ظاهر میشه. تعداد فراخوانی ها بیشتر از 13000 هستش ؟!!!!

gwbasic
سه شنبه 26 مهر 1390, 07:56 صبح
کد مربوط به M رو کامنت کردید در صورت وجود کاملا واضح هست که برنامه هنگ کنه و خطای StackOverFlow بده چون برنامه شما توی loop می افته متد M داره D رو صدا می زنه و D هم داره M رو صدا می زنه پس هیچ وقت این الگوریتم پایانی نداره البته کد رو کامل نذاشتین و الگوریتم رو هم خودتون می دونید شما باید trace کنید و ببینید که ایراد الگوریتم کجاست و از اینکه توی loop بیافته رو بگیرید

mohan21
چهارشنبه 27 مهر 1390, 00:21 صبح
سلام دوستان

ممنون

برنامه رو بطور کامل قرار دادم، با مقادیر زیر اجرا کنید ::
20
14
23 تا 25
2 تا 4
1200

و همچنین با مقادیر ::
200
147
230 تا 302
7 تا 18
16500

می تونید اعداد رو تغییر بدید ...

خوب خطای Stack Over Flow ... داده میشه، برای رفع این مشکل چه باید کرد و به چه دلیل میدهد !!!

mohan21
چهارشنبه 27 مهر 1390, 22:14 عصر
کسی برای جواب نیست ؟؟؟؟

مرتضی تقدمی
چهارشنبه 27 مهر 1390, 22:57 عصر
سلام
دلیلش همونی بود که گفتم. شما چند تا حلقه گذاشتید که چند تا تابع رو تند تند و تو در تو فراخوانی می کنه! اعداد بالا رو که وارد کردم خطا نداد, اما کمی که اعداد رو بالا بردم خطا داد. توابع توی حلقه ها خیلی زیاد تکرار میشن. من که نفهمیدم این برنامه چکار میکنه, شاید می تونستم درستش کنم.
موفق باشید