[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: Ömer F. USTA (omerusta@gmail.com)
Date: Thu 26 Apr 2007 - 23:34:50 EEST


Konu malloctan açýlmýþken hatýrlatmak isterim ms vista iþletim sisteminde
gcc ile derlenmiþ bir kod sistem belleginden 32 mb alandan fazlasýný
alamýyor. Ýlgili metne buradan ulaþabilirsiniz :
http://www.trnicely.net/misc/vista.html

On 4/26/07, Caglar Akyuz <caglar@bilkon-kontrol.com.tr> wrote:
> 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
>

-- 
Ömer Fadýl USTA
http://www.bilisimlab.com/
_______________________________________________
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.