Skip to main content

সেগমেন্টেশন ফল্ট কোর ডাম্প [ Segmentation fault ] এরর !!

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

Popular posts from this blog

[Python] *args vs **Kwargs

পাইথনে ফাংশন আর্গুমেন্ট *args ও **kwargs আমরা মাঝে মাঝেই পাইথনের ফাংশনের প্যারামিটার হিসাবে *args, ** kwargs কে দেখতে পাই । তো এগুলো আসলে কি ? এবং এগুলো কিভাবে কাজ করে ? এই দুইটা বুঝতে হলে প্রথমে আমাদের আর্গুমেন্ট কি সেটা বুঝতে হবে । আর্গুমেন্ট কোন ফাংশন কল করার সময় আমার ফাংশনে যে ভেলু pass করি করি সেটা কে বলা হয় আর্গুমেন্ট । পাইথনে দুই ধরনের আর্গুমেন্ট আছে, Keyword Argument. Positional Argument. Keyword Argument যে সকল আর্গুমেন্টের সাথে তার আইডেন্টিফায়ার থাকে সেসব আর্গুমেন্ট কে keyword argument বলে । উদাহরণ দিলে পরিষ্কার হয়ে যাবে। মনে করেন আমাদের এইরকম একটা ফাংশন আছে, উপরে আমরা ৪ নং লাইনে ফাংশন কল করার সময় যে দুইটা আর্গুমেন্ট pass করলাম সেটাকে বলা হয় keyword argument. এখানে name = 'Arif' এ name এবং age = 24 এর age আর্গুমেন্ট দুইটির আইডেন্টিফায়ার । কারণ name, age দিয়ে আমরা আলাদা ভাবে দুইটা আর্গুমেন্টকে আইডেন্টিফাই করতে পারছি । Positional Argument যে আর্গুমেন্ট গুলো keyword argument না সেগুলো কে positional argument বলে । এই ধরনের আর্গুমেন্টের কোন আইডেন্টি...