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

  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

উইন্ডোজ এর Diskpart এর কিছু কমান্ড নিয়ে কাজ করা

অনেক সময় দেখা যায় যে উইন্ডোজ দেয়ার সময় আমরা আমাদের হার্ডডিস্ক কে গুই ব্যবহার করে আমাদের প্রয়োজন অনুসারে ভাগ করতে পারি না । সেই ক্ষেত্রে আমারা যদি ডিস্কপার্ট সফটওয়্যার টি ব্যাবহার করি তবে সহজেই সেটা করতে পারব ।  উইন্ডোজ দেয়ার সময় যখন Install Windows অপশন আসে তখন আমারা যদি Shift + F10 চাপি তবে উইন্ডোজ এর কমান্ড লাইন চলে আসবে । সেখানে যদি আমরা diskpart লিখলেই diskpart ওপেন হবে । এখানে আমরা ডিস্কপার্ট এর বিভিন্ন কমান্ড ব্যাবহার করতে পারব ।     এখন দেখব ডিস্কপার্ট এর বিভিন্ন কমান্ড কিভাবে ব্যাবহার করা যায় ।  আমার কয়টা হার্ড ডিস্ক আছে আছে সেটা দেখার জন্য list disk লিস্ট থেকে কোন একটা হার্ডডিস্ক কে সিলেক্ট করার জন্য  select Disk 0; ডিস্ক ০ কে সিলেক্ট করবে সিলেক্ট করা হার্ড ডিস্ক এর আন্ডারে কয়টা পার্টিশন আছে সেটা দেখার জন্য list partition primary partition ক্রিয়েট করার জন্য কমান্ড  create partition primary size = sss    এটার ড্রাইভ লেটার দেয়ার জন্য লিখতে হবে assign letter = 'D' এটা কে ntfs এ ফরমেট করার জন্য ল...