# C Öğreticisi 27 (Bellek Yönetimi)

Bu yazılar [www.tutorialspoint.com/cprogramming/](http://www.tutorialspoint.com/cprogramming/) adresindeki yazı dizilerinin çevirileridir.

Bu bölüm C’deki dinamik bellek yönetimini açıklar. C programlama dili bellek tahsisi ve yönetimi için çeşitli fonksiyonlar sağlar. Bu fonksiyonlar \<stdlib.h> başlık dosyasında bulunabilir.![](https://miro.medium.com/max/60/1*-mP3lS_mAXFBykfNnwuTSQ.png?q=20)![](https://miro.medium.com/max/2696/1*-mP3lS_mAXFBykfNnwuTSQ.png)

## Belleği Dinamik Olarak Ayırma <a href="#id-1c05" id="id-1c05"></a>

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 <a href="#id-4e42" id="id-4e42"></a>

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>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://aslihana.gitbook.io/c-ogreticisi/c-oegreticisi-27-bellek-yoenetimi.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
