ورود

نسخه کامل مشاهده نسخه کامل : stack overflow



YOOLLOOZ1
19-12-2012, 19:39
سلام دوستان
من یه برنامه تو c++ برای معکوس کردن ماتریس به روش تکرار نوشتم که جواب میده ولی از حدودای ماتریس 85*85 به بالا پیغام stack overflow رو میده .اگه کسی بتونه کمکم کنه ممنون میشم.
در ضمن برنامم رو بدون استفاده از کلاس نوشتم و حتما باید بدون کلاس باشه.چون میخوام تو c ببرمش(واسه کامپایل کردن تو یه نرم افزار که فقط c رو میشناسه ):n13::n13:

god of war 2
19-12-2012, 20:02
خطای سر ریز بافر (stack overflow) زمانی رخ میده که شما قصد استفاده از مقدار بیشتری از فضای استاندارد یک متغییر رو داشته باشید.
راه حل های زیادی وجود دارد مثل تغییر الگوریتم کلی که باید الگوریتم رو طوری تغییر بدید که با توجه به فضای استاندارد متغییر ها عمل کند و نیاز به فضای بیشتر نداشته باشد. یا میتونید متغییر هایی رو که سرریز میشوند رو یافته سپس در نوع بزرگتری تعریفشون کنید.
مثلا متغییری که از نوع short تعریف شده و سرریز شده میتونه به نوع بزرگتر یعنی long تعریف بشه.
یا حتی ممکنه مثلا متغییری از نوع int با علامت تعریف شده باشه ولی در الگوریتم هیچوقت مقدار منفی برای آن وجود نداره پس این متغییر میتونه بصورت بهینه تر و از نوع unsigned int تعریف بشه و رنج مقادیر مثبت بیشتری رو شامل بشه.
یا حتی میتونید از مقادیر بدون علامت به همراه یک فلگ استفاده کنید که هردو ویژگی رنج بیشتر مقادیر و علامت دار بودن رو داشته باشه
و ....
پیشنهاد میکنم ابتدا کدتونو تست کنید تا متوجه بشید دقیقا کدوم قسمت سرریز میشه بعد میتونید خیلی راحت تر اون قسمت رو فیکس کنید.