Null İşaretçiler
Coddy'nin C++ Journey'sinin Mantık & Akış bölümünün bir parçası — ders 4 / 56.
Bir işaretçi (pointer) tanımladığınızda, otomatik olarak anlamlı bir şeye işaret etmez. Başlatılmamış bir işaretçi rastgele bellek adresleri içerir, bu da onu kullanmaya çalıştığınızda ciddi hatalara yol açabilir. İşte bu noktada, güvenli programlama için null işaretçiler (null pointers) vazgeçilmez hale gelir.
Null pointer, açıkça hiçbir şeyi işaret etmeyen bir pointer'dır. Modern C++'ta, bir null pointer'ı nullptr ile ilklendirerek oluşturursunuz:
int* ptr = nullptr; // ptr artık bir null pointer'dırnullptr anahtar kelimesi, işaretçinin herhangi bir geçerli bellek konumunu göstermediğini belirtir. Bu, bir işaretçiyi başlatılmamış bırakmaktan çok daha güvenlidir; çünkü işaretçinin gösterdiği değere erişmeye çalışmadan önce işaretçinin null olup olmadığını kontrol edebilirsiniz.
Herhangi bir işaretçiyi (pointer) kullanmadan önce, basit bir if ifadesi kullanarak null olmadığını doğrulamalısınız:
if (ptr != nullptr) {
// Burada *ptr kullanmak güvenlidir
int value = *ptr;
}Bu uygulama, programınızın geçersiz bellek konumlarına erişmesi nedeniyle çökmesini önler. İşaretçileri bildirdiğinizde her zaman nullptr olarak başlatın ve başvuruyu kaldırmadan (dereferencing) önce null olup olmadığını kontrol edin.
Görev
Kolayİşaretçileri (pointers) dereference etmeden önce null olup olmadıklarını kontrol ederek güvenli işaretçi kullanımını gösteren bir program oluşturun.
Aşağıdaki girdi sağlanacaktır:
"valid"veya"null"değerlerinden biri olan bir dize (string)
Programınız şunları yapmalıdır:
dataadında bir tam sayı (integer) değişkeni tanımlayın ve42değeriyle başlatınptradında bir işaretçi (pointer) tanımlayın- Eğer girdi
"valid"ise,datadeğişkeninin adresiniptrişaretçisine atayın - Eğer girdi
"null"ise,ptrişaretçisinenullptratayın - İşaretçiyi kullanmaya çalışmadan önce
ptrdeğişkeninin null olmadığını kontrol etmek için bir if-ifadesi kullanın - Eğer işaretçi null değilse, işaret ettiği değeri yazdırın
- Eğer işaretçi null ise, bir güvenlik mesajı yazdırın
Aşağıdaki tam çıktı formatını kullanın:
Value: [value]Null işaretçiler için şu formatı kullanın:
Pointer is null - cannot dereferenceKopya kağıdı
Tanımsız davranışlardan kaçınmak için işaretçileri nullptr ile başlatın:
int* ptr = nullptr; // ptr artık bir null işaretçidirİçeriğine erişmeden (dereferencing) önce bir işaretçinin null olup olmadığını her zaman kontrol edin:
if (ptr != nullptr) {
// Burada *ptr kullanmak güvenlidir
int value = *ptr;
}nullptr anahtar kelimesi, işaretçinin herhangi bir geçerli bellek konumunu göstermediğini açıkça belirtir; bu da kodunuzu daha güvenli hale getirir ve geçersiz belleğe erişimden kaynaklanan çökmeleri önler.
Kendin dene
#include <iostream>
#include <string>
using namespace std;
int main() {
// Girdiyi oku
string input;
cin >> input;
// Veri değişkenini tanımla
int data = 42;
// YAPILACAK: Kodunuzu buraya yazın
// - ptr adında bir işaretçi (pointer) tanımlayın
// - Girdiyi kontrol edin ve ptr'ye uygun değeri atayın
// - İşaretçiyi güvenli bir şekilde kontrol etmek ve kullanmak için if ifadesini kullanın
return 0;
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık & Akış bölümündeki tüm dersler
1İşaretçiler ve Bellek
İşaretçi Nedir?Adres OperatörüDereference OperatörüNull İşaretçilerİşaretçiler ve Diziler'new' ile Dinamik Bellek'delete' ile Belleği Serbest BırakmaÖzet - İşaretçi Pratiği2Vektörler (Dinamik Diziler)
std::vector'a GirişBir Vektör OluşturmaEleman EklemeElemanlara ErişmeVektör BoyutuFor Döngüsü ile YinelemeAralık Tabanlı For DöngüsüEleman SilmeÖzet - Vektör İşlemleri3Proje: Görev Listesi Aracı
Projeye Genel BakışGörev Ekleme