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

উবুন্টু তে Oracle SQL Developer ইন্সটল + এর সাথে MySQL Database Connecte করার উপায়

Oracle SQL Developer Tool Install করার জন্য আপনর  সিস্টেমে অবশ্যই জাভা - ৮ ইন্সটল করা থাকবে হবে । যদি জাভা - ৮  ইন্সটল করা না থাকে তবে  এই  লিঙ্ক  থেকে ইন্সটল করতে পারবেন । Part-1 : [ Install Oracle SQL Developer Tool ] উবুন্টুর জন্য Linux RPM  ফাইল টি ডাউনলোড করে নিন । এখন ডাউনলোড ফাইল টি Downloads ফোল্ডারে কপি করে রাখুন । এখন - Open Terminal (Ctrl + Alt + T) cd Downloads এখানে যদি আপনি ls command চালান তবে আপনি Downloads ফোল্ডারের আন্ডারে sqldeveloper_file_name.rpm নামে একটি .rpm ফাইল দেখতে পাবেন । এখন নিচের কমান্ড গুলা চালান  sudo apt-get install -y alien sudo alien --scripts sqldeveloper_file_name.rpm ২য় কমান্ডটি রান করলে .rpm ফাইল থেকে একটা .deb ফাইল জেনারেট হবে । এখন .deb ফাইলটি ইন্সটল করার জন্য এই কমান্ড রান করেন    sudo dpkg -i sqldeveloper_file_name.deb Part-2 : [ Connect to MySQL Database ] প্রথমে Connector/J  ডাউনলোড করে নিন । আপনি  Platform Independent ভার্সন ডাউনলোড করবেন । এখ...

[ UVa ] 10048 - Audiophobia

আমাকে কোন একটা শহরের একটা জায়গা থেকে অন্য একটা জায়গায় যেতে হবে । আমি বিভিন্ন রাস্তা ব্যাবহার করে আমার  কাঙ্ক্ষিত জায়গায় যেতে পারি । কিন্তু আমাকে এমন রাস্তা ব্যাবহার করে যেতে হবে যে রাস্তা দিয়ে গেলে আমাকে সবথেকে কম decibels এর শব্দ শুনতে হবে ।   এই সমস্যা টি সমাধান করার জন্য আমাদের কে  গ্রাফের ইনফরমেশন দেয়া হবে সেগুলো নিয়ে একটা Minimum Spanning Tree বানাতে হবে ।  এখন এই MST র উপর query করতে হলে আমাদের কে DFS/BFS চালাতে হবে ।  এইখান থেকে আমরা যে একটা নোড থেকে অন্য একটা নোডে যাওয়ার রাস্তা পাব তার মধ্যে খুজে দেখব কোন এজের ওয়েট সবথেকে বেশি । সেটাই আমাদের কে প্রিন্ট করেত হবে ।  যদি কোন রাস্তা না থাকে তবে no path প্রিন্ট করতে হবে ।  কোড : হ্যাপি কোডিং :)

Eclipse এ PyDev অফলাইনে কিভাবে ইন্সটল করা যায় ?

আমরা যদি Eclipse এ পাইথন ডেভেলপ করতে চাই তবে আমাদের PyDev ইন্সটল প্লাগিন ইন্সটল করা থাকতে হবে । PyDev ইন্সটল করার সবথেকে সহজে উপায় হল Eclipse এর Install New Software অপশন ব্যবহার করে ইন্সটল করা । কিন্তু এইটা মাঝে মাঝে সমস্যা হয় । কাজ করে না । এই জন্য আমরা PyDev প্লাগিন ম্যানুয়ালি ইন্সটল করতে পারব । এবং এটা করার জন্য আমরা যেটা করতে পারি সেটা হল : এই প্লাগিনের সর্বশেষ জিপ ভার্সন টি ডাউনলোড করুন  এখান থেকে জিপ ফাইল টি আনজিপ করুন । আনজিপ করলে আমরা features ও plugins নামে ২ ফাইল পাব  । এই ফাইল ২ টি কপি করে আমরা Eclipse সফটওয়্যারের dropins ফোল্ডারে পেস্ট করে দিব । এখন আমাদের Eclipse যদি চালু করা থাকে তবে Eclipse রিস্টার্ট দিব ।  আমাদের ইন্সটল ঠিক ভাবে হয়েছে কি না সেটা দেখার জন্য আমরা Window -> Preferences এ গিয়ে দেখব PyDev আছে কি না । যদি থাকে তবে এখন আপনি Eclipse এ পাইথনের জন্য কোড লিখতে পারবেন । ধন্যবাদ :)