'new' ile Dinamik Bellek
Coddy'nin C++ Journey'sinin Mantık & Akış bölümünün bir parçası — ders 6 / 56.
Şimdiye kadar, programınızda halihazırda oluşturulmuş değişkenleri işaret eden işaretçilerle çalıştınız. Peki ya programınız çalışırken değişkenler oluşturmanız gerekirse? İşte bu noktada, new anahtar kelimesi ile dinamik bellek tahsisi zorunlu hale gelir.
new anahtar kelimesi, program yürütme sırasında heap üzerinde bir değişken için bellek tahsis etmenize olanak tanır. Stack üzerinde oluşturulan normal değişkenlerin aksine, dinamik olarak tahsis edilen bellek, siz onu açıkça serbest bırakana kadar kalıcı olur.
int* ptr = new int; // Bir tam sayı için bellek ayırır
*ptr = 42; // Ayrılan belleğe bir değer atarBu örnekte, new int bir tam sayıyı depolamak için yeterli bellek ayırır ve bu bellek konumuna bir işaretçi döndürür. Ardından, değer atamak ve dinamik olarak ayrılmış değişkene tıpkı diğer herhangi bir işaretçi gibi erişmek için dereference (başvuru giderme) operatörünü kullanabilirsiniz.
Dinamik bellek tahsisi, çalışma zamanına kadar ne kadar belleğe ihtiyacınız olacağını bilmediğinizde veya değişkenlerin oluşturuldukları kapsamın ötesinde var olmalarına ihtiyaç duyduğunuzda özellikle yararlıdır. Bu esneklik, new operatörünü daha karmaşık programlar oluşturmak için güçlü bir araç haline getirir.
Görev
KolayProgram yürütme sırasında bir değişken için bellek ayırmak üzere new anahtar kelimesini kullanarak dinamik bellek ayırmayı gösteren bir program oluşturun.
Aşağıdaki girdi sağlanacaktır:
- Dinamik olarak ayrılan bellekte saklanacak bir tam sayı değeri
Programınız şunları yapmalıdır:
- Bir tam sayı için dinamik olarak bellek ayırmak üzere
newanahtar kelimesini kullanın newtarafından döndürülen işaretçiyinumPtradlı bir işaretçi değişkeninde saklayın- Girdi değerini dinamik olarak ayrılan belleğe atamak için dereference (içerik) operatörünü kullanın
- İşaretçiyi dereference ederek dinamik olarak ayrılan bellekte saklanan değeri yazdırın
- İşaretçide saklanan bellek adresini yazdırın
Aşağıdaki tam çıktı formatını kullanın:
Value: [value]
Address: [memory address]Bellek adresi, C++'ın dinamik olarak ayrılmış bellek için bellek adreslerini gösterdiği biçim olan onaltılık (hexadecimal) formatta görüntülenecektir.
Kopya kağıdı
new anahtar kelimesi, program yürütme sırasında yığın (heap) üzerinde bir değişken için bellek ayırır:
int* ptr = new int; // Bir tam sayı için bellek ayırır
*ptr = 42; // Ayrılan belleğe bir değer atarYığın (stack) üzerinde oluşturulan normal değişkenlerin aksine, dinamik olarak ayrılan bellek, açıkça serbest bırakılana kadar kalıcıdır ve oluşturulduğu kapsamın (scope) ötesinde var olabilir.
Kendin dene
#include <iostream>
using namespace std;
int main() {
// Girdiyi oku
int value;
cin >> value;
// YAPILACAK: Kodunuzu aşağıya yazın
// Bir tam sayı için belleği dinamik olarak ayırmak için 'new' kullanın
// İşaretçiyi 'numPtr' adlı bir değişkende saklayın
// Girdi değerini dinamik olarak ayrılan belleğe atayın
// Sonucu yazdırın
cout << "Value: " << /* numPtr'ın değerine buradan erişin (dereference) */ << endl;
cout << "Address: " << /* numPtr içinde saklanan adresi yazdırın */ << endl;
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