Null Pointer — hech qanday valid obyekt yoki funksiya manziliga ishora qilmasligini bildiradigan maxsus pointer qiymati. U “qiymat yo‘q” holatini ifodalaydi, ammo dereference qilinmaydi.
Representation
Til darajasidagi null pointer literalining bit representationi barcha platformada nol bo‘lishi shart emas, garchi ko‘p zamonaviy tizimda shunday. Source semantik qiymat bilan raw serialization ajratiladi.
Dereference
Null dereference ko‘pincha past addressdagi unmapped guard sabab segmentation/protection fault beradi. Compiler undefined behaviorli tilda null emasligi taxminidan optimization uchun foydalanishi mumkin.
Nullability
Optional reference qonuniy null bo‘lsa API nullabilityni type yoki annotation bilan ko‘rsatadi. Majburiy argumentda runtime check boundaryda bajariladi. Null Object pattern boshqa semantikaga ega default obyekt beradi.
Chegaralar
p == nullptr pointer valid lifetimega ega ekanini isbotlamaydi; non-null dangling pointer ham xavfli. Null check faqat bitta xato sinfini qamraydi.
Himoya
Kernel null-page mappingni taqiqlab null dereferenceni exploitationdan himoya qiladi. Offset qo‘shilgan null pointer past bo‘lmagan fault address berishi mumkin.
Sinov
Test null input, optional branch, compiler optimization va foreign interface nullabilityni qamraydi. Crash report access turi va pointer kelib chiqishini ko‘rsatadi.
Amaliy nazorat
Null Pointer bilan ishlaydigan tizim nullability va access boundaryni aniq lifecycle va version bilan yuritadi. Pointer, mapping, navbat yoki exception holati boshqa qatlamga uzatilganda ownership hamda permission shartlari yo‘qolmaydi. Debug rejimda manzil, obyekt identifikatori va state transition qayd etiladi; production log ASLR, maxfiy ma’lumot va raw pointerlarni ochib yubormaydigan shaklga keltiriladi. Eskirgan handle yoki metadata reuse qilinmasligi uchun generation, build-id yoxud reference hisobidan foydalaniladi.
Muhim xavf — nullni valid lifetime isboti deb olish. Bunday vaziyatda tizim taxmin bilan davom etmaydi: access fault, aniq error, konservativ fallback yoki nazoratli cleanup qo‘llanadi. Signal/fault kelgan nuqta har doim asl buzilish joyi emas; allocation, mapping va oxirgi ownership amallari trace’i tashxisga yordam beradi. Parallel accessda lock, atomic ordering va lifetime birgalikda tekshiriladi. Timeout yoki null check memory safetyning o‘rnini bosa olmaydi.
Sifat nazorati optional, FFI va crash testi orqali bajariladi. Sinovlar normal holat bilan birga nol uzunlik, page boundary, alignment, juda katta offset, concurrent close/free, permission o‘zgarishi va platforma farqlarini qamraydi. Correctness avval etalon hamda invariant bilan tekshiriladi, keyin page fault, cache miss, contention, latency yoki xotira sarfi o‘lchanadi. Sanitizer, fault injection va malformed-input fuzzing topgan minimal holat doimiy regressiya testiga aylantiriladi.
Null pointer “hech qanday obyektni ko‘rsatmaydi” degan semantik qiymatdir; uning bit ko‘rinishi barcha platformalarda mutlaq nol bo‘lishi shart degan umumiy xulosa chiqarilmaydi. Dereference C va C++da undefined behavior bo‘lib, operatsion tizim ko‘pincha past virtual sahifalarni map qilmaslik orqali fault hosil qiladi. Optimizer esa dastur yaroqli pointer talabini buzmaydi deb faraz qilishi mumkin, shuning uchun kech null check kutilgan himoyani bermasligi ehtimol. API optional natijani pointer bilan bersa ownership va nullability hujjatda aniq yoziladi; reference yoki non-null wrapper kuchliroq contract beradi.
Bog‘liq tushunchalar
nullptr, optional value, pointer dereference, segmentation fault, nullability, memory safety