Ana içeriğe atla

Pointerlar ile Dinamik Bellek Yönetimi

 

#include <iostream>

using namespace std;

/*

int main() 

{ //Pointer_New_Delete ile Dinamik bellek yönetimi

// dinamik olarak yer tahsis edilmesi ve tahsis edilen yerin silinmesi

// ram de ayrılmış olan alanın işi bittikten sonra ayrılmış olan yerin ram den silinmesi

// Neyi ifade eder !! pointer ile işlenen veri silinmez ise ayrılmış olan yer ram de yer tutmaya devam eder

// Sonraki gelen yeni verilere yer açılması için delete komutunu kullanmalıyız

// Aksi taktirde yeni gelen veriler ramde yeni yerler tutacağından ramin şişmesine yol açar

// Ram de biriken veriler ramin çökmesine sebep olmasın diye ayrılmış yerin boşaltılması delete ile gerçekleşir.


int *ptr = new int;

*ptr = 5;

cout << *ptr << endl;

delete ptr; // kod bloğunun görevi bittikten sonra kullanılmalı

ptr = NULL; // *ptr değişkenimizin ayrılmış olan alanın artık boş olduğu anlamına gelir


if (ptr != NULL) // ptr değişkenimizin içeriği boş değilse ekrana yazdır

{

// ptr değişkenimin yeniden çalışana kadar 

// NULL boş bırakılan alanı ram tekrar kullanıma açar 

// aksi takdirde ayrılmış bölge daha önceki tuttuğu veriyi ram de tutmaya çalışır

//

cout << ptr << endl;


}

// ptr değişkenimize yeni veriyi atamak için new int dememiz gerekir ki yeni değeri döndürebilsin

ptr = new int; // ptr değişkenimizin yeni değerini *ptr yani pointera atamış olduk

*ptr = 10;

cout << *ptr << endl;

delete ptr; // boşalltığımız alan ptr değişkeninin içermiş olduğu değer ram den temizlenmiş oldu


return 0; 

}

*/

/*

int main()

{

// pointerlar ile daha güvenli çalışmak için NULL değerini en başında belirtmek kodun güvenliğini sağlar

// Yada foksiyon içinde tanımlayıp çağara biliriz

// NULL pointer

int *p;

p = NULL;

if (p != NULL) 

{

*p = 5;

}

else

{

p = new int;

*p = 5;

}

cout << *p << endl;


return 0;

}

*/

//Fonksiyonların pointer return edilmesi

/*/

int *fonksiyon()

{

int* p = new int;

*p = 37;


return p;

}

int main()

{

int* ptr;

ptr = fonksiyon();


if (ptr !=NULL)

{

cout << *ptr << endl;

delete ptr;

}

return 0;

}

*/

int main()

{

//Pointer ile Kullanıcıdan veri alınması ve Delete ile belleğin temizlenmesi

int n;

cout << "Kac adet tam sayi girmek istersiniz? : ";

cin >> n;

int *p = new int[n];

for (int i=0;i<n;i++)

{

cin >> p[i];

}

int sum = 0;

for (int i=0;i<n;i++)

{

sum += p[i];

}

cout << "Sum : " << sum << endl;

delete[] p;


return 0;

}

Bu blogdaki popüler yayınlar

C++ float double string Aritmatik işlemler

  #include <iostream> using namespace std; //void fonk()  //{ // cout << "Merhaba\n"; //} // //int main()  //{ // cout << "Merhaba C++\n"; // // fonk(); // return 0; //} /* int main()  { //Değişkenler rakam ile başlayamaz //Değişken isimlerinde türkçe karakter olmaz //değişken isimleride boşluk olmaz //Değişken isimlerinde nokta vb karakter olmaz //******************************************** //int ram'da 4 byte yer kaplıyor -2147483648 to 2147483647 //char 1 byte  (ASCII tablosu) //bool 1 byte //float 4 byte //double 8 byte //CPU ramdan byte byte okur //Void herhangi bir return etmiyecekse kendi aldığı değerleri kullanır.Bir değer döndürmez. string isim; isim = "Kaan"; int yas; yas = 22; cout << "Bir zamanlar " << isim << " isminde bir genc varmis." << endl << isim << " " << yas << " yasindaymis." ...

C++ try catch, Call by Value, Call by Referans Kullanımı

  #include <iostream> using namespace std; //int main()  //{ // int bolunen, bolen; // cout << "Lutfen bolunen sayiyi giriniz : "; // cin >> bolunen; // cout << "Lutfen bolen sayiyi giriniz : "; // cin >> bolen; // // int sonuc; // // try{ // if (bolen == 0) // throw 99;//Burada throw için herhangi bir tam sayı girilir.örn: negatif sayılar gibi durumlar için çoğaltılabilir // sonuc = bolunen / bolen; // // cout << "Sonuc : " << sonuc; // } // catch(int hataKodu){ // cout << "Bolen sayi sifir olmamali !!" << endl; // } // // cout << endl; // return 0; //} /* try catch Kullanımı :  * try catch kullanıcının beklenmedik bir girdi vermesi sonucu  * programın çökmesini engllemek amacı ile kullanılır * Ayrıca veri tabanı bağlantılarında bağlantının olmaması ve  * işlem sonrasında veri tabanı bağlantısını kapatma veya programın başlangıcında bağlantıyı a...

Pointer ve & (ampersant) Konusunu Kavrayalım

  #include <iostream> #include <string> using namespace std; /* int main()  {  int x = 7; cout << "x 'in degeri : " << x << endl; cout << "x 'in RAM deki adresi : " << &x << endl;  // & ile ramdeki ilk adres değeri  000000D3ED4FFCF4 ni bulduk  // int 4 byte oldugundan bu adresde dahil 4 byte 'lik yerin tamamını hesaplar // ama bize  4 byte lik adresin ilk değerini verir. return 0;  } */ /* int main() { // Pointer  ve & (ampersant) Konusunu Kavrayalım int x = 7; int *p = &x; // pointer ile x 'in adres değerini bulma cout << "x 'in degeri : " << x << endl; cout << "x 'in & ile RAM deki adresi : " << &x << endl; //pointer ile gösterimi cout <<"pointer p ile adres degeri : "<< p << endl; cout << "*p ile ( *p = &x) x in pointer degeri : " <...