[Linux-programlama] Re: C malloc free (kafama takılan bir nokta

---------

New Message Reply About this list Date view Thread view Subject view Author view Attachment view

From: M.Atif CEYLAN (atifceylan@gmail.com)
Date: Thu 26 Apr 2007 - 14:26:28 EEST


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;
}

mallocladığım alanı nasıl free edebilirim ve tuttuğu alanı free
edebilmek için bu foksiyonu daha mantıklı nasıl yazabilirim.

iyi Çalışmalar...

_______________________________________________
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama


New Message Reply About this list Date view Thread view Subject view Author view Attachment view

---------

Bu arsiv hypermail 2.1.2 tarafindan uretilmistir.