Menu
Coddy logo textTech

'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 atar

Bu ö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.

challenge icon

Görev

Kolay

Program 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:

  1. Bir tam sayı için dinamik olarak bellek ayırmak üzere new anahtar kelimesini kullanın
  2. new tarafından döndürülen işaretçiyi numPtr adlı bir işaretçi değişkeninde saklayın
  3. Girdi değerini dinamik olarak ayrılan belleğe atamak için dereference (içerik) operatörünü kullanın
  4. İşaretçiyi dereference ederek dinamik olarak ayrılan bellekte saklanan değeri yazdırın
  5. İş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 atar

Yığı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;
}
quiz iconKendini test et

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