C/C++ তে কোড করার সময় মাঝে মাঝে একটা এরর দেখা যায় Segmentation fault core dump । এই এরর আর অর্থ হল আপনার প্রোগ্রাম এমন একটা মেমরি লোকেশন অ্যাক্সেস করতে চাচ্ছে যে মেমরি লোকেশন অ্যাক্সেস করার পারমিশন আপনার প্রোগ্রামকে দেয়া হয় নি ।
এই এরর টা কয়েকটা বিশেষ কারণে হতে পারে । আজকে আমরা তার মধ্যে একটা কারণ দেখব। যদি কোনো রিকার্সিভ ফাংসনে Stack Overflows হয় তখন এই এরর দেখাবে । আর কোন একটা রিকারসিভ ফাংসনে তখনই Stack Overflows হয় যখন ফাংশনটি কোন Base case খুজে না পায় । Base case খুজে না পেলে ফাংশনটি ইনফিনিটি ভাবে চলতেই থাকবে এবং শেষে যখন Function Call Stack ফুল হয়ে যাবে তখনই Stack Overflow হবে ।
উদাহরণ হিসাবে আমারা নিচের ফাংশনটা দেখতে পারি ।
int factorial(int n) { if(n == 0) return 1; return n * factorial(n - 1); }
এই প্রোগ্রামে যদি আমর n এর মান >= 0 দেই তাহলে কোন সমস্যা হবে না । সব ঠিকঠাক ভাবে কাজ করবে । কিন্তু ঝামেলা হবে তখনই যখন আমরা n এর মান < 0 দিব । যেমন : আমরা জনি n = -1 দেই তখন ফাংশনটি কোন থামার জন্য কোন Base Case খুজে পাবে না এবং ফাংশনটি ইনফিনিটি ভাবে চলতেই থাকবে । যার ফলে Stack Overflows ঘটবে এবং Sagmentatin Fault (Core Dump) এই এরর দেখাবে ।
এখন কথা হল এই সমস্যাটা সমাধান করবো কি ভাবে । আমার মনে হয় আপনারা এর মাঝেই ধরতে পাড়ছেন প্রোগ্রামটা কে ঠিক করার জন্য আমাদেরকে কথাই পরিবর্তন করতে হবে । তার পরও বলি আমরা যদি আমাদের ফাংশনের বেস কেসটা একটু পরিবর্তন করে n == 0 এর জায়গায় n < 0 দিয়ে দেই তাহলে আর কোন সমস্যা হবে না ।
Comments
Post a Comment