কম্পিউটার

C/C++ এ ঝুলন্ত, অকার্যকর, নাল এবং ওয়াইল্ড পয়েন্টার


ঝুলন্ত পয়েন্টার

ড্যাংলিং পয়েন্টার হল একটি পয়েন্টার যা একটি মেমরি অবস্থানের দিকে নির্দেশ করে যা মুক্ত (বা মুছে ফেলা হয়েছে)। বিভিন্ন উপায় আছে যেখানে পয়েন্টার ড্যাংলিং পয়েন্টার হিসাবে কাজ করে

ফাংশন কল

স্থানীয় ভেরিয়েবলের দিকে নির্দেশকারী পয়েন্টারটি ঝুলে যায় যখন স্থানীয় ভেরিয়েবল স্থির থাকে না।

int *show(void) {
   int n = 76; /* ... */ return &n;
}

আউটপুট

Output of this program will be garbage address.

মেমরির ডি-অ্যালোকেশন

#include <stdlib.h> #include <stdio.h> int main() {
   float *p = (float *)malloc(sizeof(float));
   //dynamic memory allocation. free(p);
   //after calling free() p becomes a dangling pointer p = NULL;
   //now p no more a dangling pointer.
}

ভেরিয়েবল সুযোগের বাইরে চলে যায়

int main() {
   int *p //some code// {
      int c; p=&c;
   }
   //some code//
   //p is dangling pointer here.
}

অকার্যকর পয়েন্টার

সি-তে অকার্যকর পয়েন্টার এমন একটি পয়েন্টার যা কোনো ডেটা প্রকারের সাথে যুক্ত নয়। এটি স্টোরেজের কিছু ডেটা অবস্থান নির্দেশ করে মানে ভেরিয়েবলের ঠিকানায় নির্দেশ করে। এটিকে সাধারণ উদ্দেশ্য পয়েন্টারও বলা হয়।

এর কিছু সীমাবদ্ধতা আছে

পয়েন্টার পাটিগণিত তার কংক্রিট আকারের কারণে অকার্যকর পয়েন্টার সম্ভব নয়।

এটি ডিরেফারেন্স হিসাবে ব্যবহার করা যাবে না।

এখানে একটি সহজ উদাহরণ

#include<stdlib.h>
int main() {
   int a = 7;
   float b = 7.6;
   void *p;
   p = &a;
      printf("Integer variable is = %d", *( (int*) p) );
   p = &b;
   printf("\nFloat variable is = %f", *( (float*) p) );
   return 0;
}

আউটপুট

Integer variable is = 7
Float variable is = 7.600000

অ্যালগরিদম

Begin
   Initialize a variable a with integer value and variable b with float value.
   Declare a void pointer p.
   (int*)p = type casting of void.
   p = &b mean void pointer p is now float.
   (float*)p = type casting of void.
   Print the value.
End.

নাল পয়েন্টার

নাল পয়েন্টার হল একটি পয়েন্টার যা কিছুই নির্দেশ করে না। নাল পয়েন্টারের কিছু ব্যবহার হল:

একটি পয়েন্টার ভেরিয়েবল শুরু করার জন্য যখন সেই পয়েন্টার ভেরিয়েবলটিকে এখনও কোনো বৈধ মেমরি ঠিকানা বরাদ্দ করা হয়নি।

আমরা কোনো বৈধ মেমরি ঠিকানা পাস করতে না চাইলে কোনো ফাংশন আর্গুমেন্টে একটি নাল পয়েন্টার পাস করতে।

যেকোনো পয়েন্টার ভেরিয়েবল অ্যাক্সেস করার আগে নাল পয়েন্টার চেক করতে। যাতে, আমরা পয়েন্টার সম্পর্কিত কোডে ত্রুটি পরিচালনা করতে পারি যেমন ডিরেফারেন্স পয়েন্টার ভেরিয়েবল শুধুমাত্র যদি এটি NULL না হয়।

উদাহরণ

#include<iostream>
#include <stdio.h>
int main() {
   int *p= NULL;//initialize the pointer as null.
   printf("The value of pointer is %u",p);
   return 0;
}

আউটপুট

The value of pointer is 0.

ওয়াইল্ড পয়েন্টার

ওয়াইল্ড পয়েন্টার হল পয়েন্টার যা কিছু নির্বিচারে মেমরি অবস্থান নির্দেশ করে। (এমনকি NULLও নয়)

int main() {
   int *ptr; //wild pointer
   *ptr = 5;
}

  1. C/C++ এ Left Shift এবং Right Shift অপারেটর

  2. কিভাবে malloc() এবং free() C/C++ এ কাজ করে?

  3. isalpha() এবং isdigit() C/C++ এ

  4. C/C++ পয়েন্টার বনাম জাভা রেফারেন্স