নাল পয়েন্টার মান একটি ভাল সংজ্ঞায়িত "কোথাও" প্রতিনিধিত্ব করে না; এটি একটি অবৈধ পয়েন্টার মান যা অন্য কোনও পয়েন্টার মানের সাথে অসম তুলনা করার গ্যারান্টিযুক্ত। কোনও শূন্য পয়েন্টারকে অবজ্ঞার চেষ্টা করার ফলে অপরিজ্ঞাত আচরণের ফলাফল হয় এবং এটি সাধারণত রানটাইম ত্রুটির দিকে পরিচালিত করে, সুতরাং আপনি নিশ্চিত করতে চান যে কোনও পয়েন্টারটি অবলম্বন করার চেষ্টা করার আগে নাল নয়। বেশ কয়েকটি সি এবং সি ++ গ্রন্থাগার ফাংশন ত্রুটির শর্তটি বোঝাতে একটি নাল পয়েন্টার ফেরত দেবে। উদাহরণস্বরূপ, লাইব্রেরির ফাংশনটি malloc
নাল পয়েন্টার মানটি ফিরিয়ে দেবে যদি এটি অনুরোধ করা বাইটের সংখ্যা বরাদ্দ করতে না পারে এবং সেই পয়েন্টারের মাধ্যমে মেমরি অ্যাক্সেসের চেষ্টা করা (সাধারণত) রানটাইম ত্রুটির দিকে পরিচালিত করে:
int *p = malloc(sizeof *p * N);
p[0] = ...; // this will (usually) blow up if malloc returned NULL
সুতরাং আমাদের নিশ্চিত করা দরকার যে malloc
কলটি p
NULL এর বিপরীতে মূল্য পরীক্ষা করে সফল হয়েছে :
int *p = malloc(sizeof *p * N);
if (p != NULL) // or just if (p)
p[0] = ...;
এখন, আপনার মোজাগুলিতে এক মিনিট আটকে থাকুন, এটি কিছুটা গন্ডগোল পেতে চলেছে।
একটি নাল পয়েন্টার মান এবং একটি নাল পয়েন্টার ধ্রুবক আছে , এবং দুটি অবশ্যই অভিন্ন নয় the নাল পয়েন্টার মান হ'ল অন্তর্নিহিত আর্কিটেকচার "কোথাও" উপস্থাপন করতে যা মান ব্যবহার করে। এই মান 0x00000000, বা 0xFFFFFFFF, বা 0xDEADBEEF, বা সম্পূর্ণ আলাদা কিছু হতে পারে। মনে করবেন না যে নাল পয়েন্টার মান সর্বদা 0 থাকে।
নাল পয়েন্টার ধ্রুবক , OTOH সর্বদা 0-মানযুক্ত ইন্টিগ্রাল এক্সপ্রেশন। আপনার সোর্স কোড হিসাবে , 0 (বা কোনও অখণ্ড এক্সপ্রেশন যা 0 এ মূল্যায়ন করে) একটি নাল পয়েন্টার উপস্থাপন করে। সি এবং সি উভয়ই নাল পয়েন্টার ধ্রুবক হিসাবে ন্যূনল ম্যাক্রোকে সংজ্ঞায়িত করে। যখন আপনার কোডটি সংকলিত হবে, নাল পয়েন্টার ধ্রুবকটি উত্পাদিত মেশিন কোডে উপযুক্ত নাল পয়েন্টার মানের সাথে প্রতিস্থাপন করা হবে ।
এছাড়াও, সচেতন থাকুন যে NUL অনেকগুলি সম্ভাব্য অবৈধ পয়েন্টার মানেরগুলির মধ্যে একটি; আপনি যদি কোনও অটো পয়েন্টার ভেরিয়েবলকে স্পষ্টভাবে আরম্ভ না করে ঘোষণা করেন, যেমন
int *p;
ভেরিয়েবেলে প্রাথমিকভাবে সঞ্চিত মানটি অনির্দিষ্ট হয় এবং এটি কোনও বৈধ বা অ্যাক্সেসযোগ্য মেমরি ঠিকানার সাথে মিল নাও পারে। দুর্ভাগ্যক্রমে, কোনও এনওএলএল পয়েন্টার মানটি ব্যবহারের চেষ্টা করার আগে বৈধ কিনা তা বলার কোনও (পোর্টেবল) উপায় নেই। সুতরাং যদি আপনি পয়েন্টারগুলির সাথে কাজ করে থাকেন তবে সাধারণত আপনি যখন তাদের ঘোষণা করবেন তখন তাদের স্পষ্টভাবে NULL এ সূচনা করা এবং যখন তারা সক্রিয়ভাবে কোনও কিছুর দিকে ইঙ্গিত করছে না তখন সেগুলি NUL এ সেট করা ভাল idea
নোট করুন যে এটি সি ++ এর চেয়ে সি-তে আরও একটি ইস্যু; আইডোম্যাটিক সি ++ এর বেশি পয়েন্টার ব্যবহার করা উচিত নয়।