PDA

Tam Sürümünü Görmek İçin : Dynamic memory -- C


darkalive
29/04/2008, 00:54
normal olarak tanımladığım bir dizi ile ;


days *x[7];


dynamic memory kullanarak , tanımladığım bir dizinin ;


char **days;
days=(char **) malloc(sizeof(char *) * 7)

tam olarak farkı nedir acaba? Internette doyurucu - tatmin olamadım :utangac:- bilgi bulamadım.

Bazı öğrendiğim bilgiler var fakat , tam net bir şey oluşmadı kafamda ..
1) Malloc kullanarak aldığımız hafıza , sürekli hafızada kalıyormuş , ve program bitse dahi hafızadaki konumundan ayrılmıyormuş. O zaman ben böyle bir program yazdım ve o bölgeyi free etmedim diyelim . Artık bilgisayarda o hafıza bölümünde ; - format dışında - sürekli o bilgiler kalacak mı?

2) Tam olarak bunun bir kazancını anlayamadım , tabi ki daha starter düzeyde olduğum için , ilerde nerelerde işimize yarayabilir acaba?

3) Yoksa o kadar üstüne düşülmesi gereken bir konu değil mi acaba?


Sorularımı yanıtlayan arkadaşlara şimdiden teşekkürlerimi iletiyorum.
Kolay gelsin...


Not: ayrı bir başlık açmak istemedim acaba,


if (x<0 || y<0)
{
printf ("hebele hubele");
return 1;
}


Acaba bu kodda kullanılan return 1'in işlevi nedir acaba?


acehreli
29/04/2008, 02:23
Soruyu dizilerle ilgili olarak sorunca cok daha karmasik oluyor. Dinamik nesneleri kendi baslarina anliyor musun?


char * hatali()
{
char bir_sonuc[10];
/* ... */
return bir_sonuc; /* <-- HATA: bir_sonuc, bu fonksiyondan cikildiginda gecerli degil */
}

char * dogru()
{
char * bir_sonuc = malloc(1000);
/* ... */
return bir_sonuc; /* <-- cagiranin 'free' ile geri vermesi gerek */
}


Aradaki temel fark, otomatik nesnelerin kendiliklerinden sonlanmalari, dinamik nesnelerin ise biz 'free'yi cagirana kadar yasamalaridir.

1) malloc ile ayirdigimiz yer, biz 'free' ile geri verene kadar gecerli kalir. Ogrendiginin aksine, geri verilmesi unutulan bellekler program sonlandiginda isletim sistemi tarafindan geri alinirlar.

3) Mutlaka bilinmesi gereken bir kavramdir.

Ali

Keske ayri bir baslik acsaydin... :) 'return 1;' icinde bulundugumuz fonksiyonun sonlanmasini ve 1 degerini dOndUrmesini saglar. Gosterdigin kodun icinde bulundugu fonksiyonu cagiranlar o fonksiyonun o durumda 1 dOndUrdugunu bilerek hareket edecekler demektir.

darkalive
29/04/2008, 16:45
tekrar teşekkürler ali bey, dinamik hafıza yavaş yavaş , kafamda oturmaya başladı .

tabiki 3-5 problem daha çözmem gerekecek bu konu ile ilgili ..