C Öğreticisi 27 (Bellek Yönetimi)

Bu yazılar www.tutorialspoint.com/cprogramming/ adresindeki yazı dizilerinin çevirileridir.

Belleği Dinamik Olarak Ayırma

Programlama sırasında, bir dizinin boyutunun farkındaysanız, o zaman işler kolaydır ve onu bir dizi olarak tanımlayabilirsiniz. Örneğin, herhangi bir kişinin adını saklamak için en fazla 100 karaktere kadar gidebilir, böylece bir şeyi aşağıdaki gibi tanımlayabilirsiniz -

char ad[100];

Ancak şimdi saklamanız gereken metnin uzunluğu hakkında hiçbir fikrinizin olmadığı bir durumu ele alalım, örneğin, bir konu hakkında ayrıntılı bir açıklama saklamak istiyorsunuz. Burada, ne kadar bellek gerektiğini tanımlamaksızın karaktere bir işaretçi tanımlamamız gerekiyor ve daha sonra, gereksinime bağlı olarak, aşağıdaki örnekte gösterildiği gibi bellek ayırabiliriz -

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main() {

char ad[100];

char *aciklama;

strcpy(ad, “Zara Ali”);

/* dinamik hafıza ayrılıyor */

aciklama = malloc( 200 * sizeof(char) );

if( aciklama == NULL ) {

fprintf(stderr, “Hata — gereken hafiza ayrilamadi\n”);

} else {

strcpy( description, “Zara ali 10. sinif bir DPS ogrencisidir);

}

printf(“Ad = %s\n”, ad );

printf(“Aciklama: %s\n”, aciklama );

}

Program derlenip çalıştırıldığında -

Ad = Zara Ali

Aciklama: Zara ali 10. sinif bir DPS ogrencisidir

Aynı program calloc (); tek şey malloc’u calloc ile aşağıdaki gibi değiştirmeniz gerekiyor -

calloc(200, sizeof(char));

Böylece tam kontrole sahip olursunuz ve bellek tahsis edilirken herhangi bir boyut değerini iletebilirsiniz, boyut belirlendikten sonra değiştiremediğiniz dizilerden farklı olarak.

Belleği Yeniden Boyutlandırma ve Serbest Bırakma

Programınız çıktığında, işletim sistemi programınız tarafından ayrılan tüm belleği otomatik olarak serbest bırakır, ancak artık belleğe ihtiyacınız olmadığında iyi bir uygulama olarak, fonksiyonu free () diyerek bu belleği serbest bırakmanız gerekir.

Alternatif olarak, realloc () fonksiyonunu çağırarak tahsis edilmiş bir bellek bloğunun boyutunu artırabilir veya azaltabilirsiniz. Yukarıdaki programı bir kez daha kontrol edelim ve realloc () ve free () fonksiyonlarını kullanalım -

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main() {

char ad[100];

char *aciklama;

strcpy(ad, “Zara Ali”);

/* dinamik hafıza ayrılıyor */

aciklama = malloc( 30 * sizeof(char) );

if( aciklama == NULL ) {

fprintf(stderr, “Hata — gereken hafiza ayrilamadi\n”);

} else {

strcpy( description, “Zara ali bir DPS ogrencisidir.”);

}

/* daha büyük bir açıklama saklamak istediğinizi varsayalım \n */

aciklama = realloc( aciklama, 100 * sizeof(char) );

if( aciklama == NULL ) {

fprintf(stderr, “Hata — gereken hafiza ayrilamadi\n”);

} else {

strcat( description, “10. siniftadir”);

}

printf(“Ad = %s\n”, ad );

printf(“Aciklama: %s\n”, aciklama );

/* free() fonksiyonunu kullanarak belleği serbest bırakın */

free(aciklama);

}

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir.

Name = Zara Ali

Aciklama: Zara ali bir DPS ogrencisidir.10. siniftadir

Ek belleği yeniden ayırmadan yukarıdaki örneği deneyebilirsiniz ve strcat () işlevi, kullanılabilir bellek eksikliğinden dolayı hata verecektir.

https://www.tutorialspoint.com/cprogramming/c_memory_management.htm

Last updated