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

Operator Overloading Vs priority_queue in C++

priority_queue ডিফল্ট ভাবে বড় ডাটা কে টপে নিয়ে আশে । আমরা যদি < অপারেটর ওভারলোড করি তবে আমাদের মাথায় রাখতে হবে যে STL priority_queue হল ম্যাক্স priority_queue যার অর্থ ম্যাক্স উপদান কে সবার প্রথমে নিয়ে আসবে । এটা কে min priority_queue এ নিয়ে আসতে হলে return a.age < b.age;  এই লাইন কে , return a.age > b.age; এই লাইন দিয়ে পরিবর্তন করতে হবে । কোড : Output : 10 9 8 7 6 5 4 3 2 1 এখন আমরা যদি আউটপুট কে 1 2 3 4 5 6 7 8 9 10 দেখাতে চাই তবে ১২ নং লাইন পরিবর্তন করে লিখতে হবে return a.age > b.age; ধন্যবাদ :)
  Good becomes great, bad becomes worse. A strong man who has known power all his life can lose respect for that power, but a weak man knows the value of strength and knows compression

পাইথনে Yield কিভাবে কাজ করে ?

Yield কি সেটা বোঝার জন্য Generator বোঝা লাগবে । আবার Generator কি সেটা বোঝার জন্য Iterables বুঝতে হবে । কি প্রথমেই মাথা ঘুরে গেল ? আচ্ছা মাথা ঘুরলে ঘুরতে দেন :D  আমরা শুরু করে দেই  । Iterables কি ? আমরা যখন কোন লিস্ট ক্রিয়েট করি । আমরা লিস্টের আইটেম গুলি একটা একটা করে রিড করতে পারি । এটাকেই বলা হচ্ছে iteration code: এখানে my_list হল iterable . যখন আমরা list comprehension ব্যবহার করে কোন লিস্ট ক্রিয়েট করি সেটাও একটা iterable । code : Python এ যেসব জিনিস iterable যেমন: টাপল, লিস্ট, ফাইল, স্ট্রিং, .... ইত্যাদি কে আমরা for .... in ...: দিয়ে রিড করতে পারবো । ডাটা খুব সহজেই রিড করার জন্য এইটা খুব কাজে দেয় । কিন্তু এর একটা সমস্যা আছে । সেটা হল । এইটা সব সময় লিস্টের আইটেম গুলিকে মেমরি তে ষ্টোর করে রাখে । এখন আমাদের সবসময় মেমরি তে লিস্ট আইটেম গুলি সেভ করে নাও রাখা লাগতে পারে । তো এইটা আমরা কি ভাবে সমাধান করবো ? Generators কি ? Generators গুলো হল  একধরনের iterators । কিন্তু আমরা কেবল একবারই generator এ iterate করতে পারি । এর কারণ হল generator সব ভেলু কে মেমরি তে ষ্টোর...