From: Caglar Akyuz (caglar@bilkon-kontrol.com.tr)
Date: Thu 26 Apr 2007 - 23:17:25 EEST
M.Atif CEYLAN yazmış:
> Ustun ERGENOGLU yazmış:
>> malloc ile aldığınız bellek alanları fonksiyondan çıktığınızda
>> boşalmaz, mutlaka free ile bırakmanız gerekir. sadece fonksiyonda
>> kullanılacak yerel değişkenler fonksiyona girince stack'den yer alıp
>> kullanır, çıkınca da bırakılır, ama malloc stack'den değil heap'den
>> yer alır ve program çalıştığı sürece kalır.
>>
>> 26.04.2007 tarihinde M.Atif CEYLAN <atifceylan@gmail.com> yazmış:
>>
>>> herkese merhaba,
>>> arkadaşlar C de yazdığım bir programda cok yoğun string işlemleri
>>> kullanıyorum (10 larca mb lık dosyaları okuyup parse etmeye calışıyorum
>>> ve bu işlemi periyodik olarak devamlı olarak yapıyorum). ancak
>>> stringleri küçük parçalarda alıp her seferinde fonksiyona sokuyorum
>>> mesela :
>>>
>>> while (sart)
>>> islemyap(str)//burada en fazla 2 KB datam var
>>>
>>> islemyap(char *str)
>>> char *a = (char*)malloc(256);
>>> char *b = (char*)malloc(25);
>>>
>>> a = str_temizle(sub_str(str,3,255));
>>> b = str_temizle(sub_str(str,258,24));
>>> ........................
>>>
>>> şeklinde devam eden islemyap benzeri 4 fonksiyonum var.
>>> sorunum şu. fonksiyon sona erdiğinde ayrılan bellek alanları zaten
>>> boşalır düşüncesi ile değişkenlerimi free etmiyorum.
>>> ancak top cıktısı bir facia gibi adeta. her seferinde yükselen bir
>>> bellek var önümde. bu durum, çekirdeğin ihtiyat için benim programın
>>> ayırdığı bellek alanlarını tutması ile alakalı olabilir mi? yoksa
>>> fonksiyonların sonunda free etsem mi? ama o kadar fazla değişkenim var
>>> ki gözüm yemiyor daha kötüsü bazıları şartlara göre set edildiği için
>>> free işlemlerinde de kontrole ihtiyac duyacağım.fikirlerinizi bekliyorum
>>> iyi çalışmalar...
>>> M.Atıf CEYLAN
>>>
>>> _______________________________________________
>>> Linux-programlama mailing list
>>> Linux-programlama@liste.linux.org.tr
>>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>>
>>>
>> _______________________________________________
>> Linux-programlama mailing list
>> Linux-programlama@liste.linux.org.tr
>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>
>>
> şöyle bir foksiyonum var.
>
>
> char *fonksiyon(char *str)
> {
> char *Cikacak = (char *malloc(strlen(str)+1);
>
> int i=0,j=0;
>
> for(i=0;i<strlen(str);i++)
> if (sart)
> Cikacak[j++] = str[i];
>
> return Cikacak;
> }
malloc her zaman başarılı olmaz. Döndürdüğü değeri mutlaka NULL mı değil
mi diye kontrol etmek gerekir.
>
> mallocladığım alanı nasıl free edebilirim ve tuttuğu alanı free
> edebilmek için bu foksiyonu daha mantıklı nasıl yazabilirim.
Bence bu fonksiyon'da bir değişikliğe gerek yok. return ettiğiniz
"Cikacak" pointer'ını her zaman free'ye geçebilirsiniz.
>
> iyi Çalışmalar...
>
> _______________________________________________
> Linux-programlama mailing list
> Linux-programlama@liste.linux.org.tr
> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>
>
>
_______________________________________________
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama