Picproje Elektronik Sitesi

DERLEYİCİLER => Microchip XC Serisi => Microchip XC32 => Konuyu başlatan: XX_CİHAN_XX - 30 Ocak 2015, 23:10:18

Başlık: malloc kullanınca PIC resetleniyor.
Gönderen: XX_CİHAN_XX - 30 Ocak 2015, 23:10:18
MPLAB XC32 Kullanıyorum. Proje ayarlarından Heap size değerini 2048 yaptım. Programın bir fonksiyonunda aşağıdaki gibi bir kod var.

     
      FE_STV0903_InternalParams_t *pParams;
      pParams =(FE_STV0903_InternalParams_t *) malloc(sizeof(FE_STV0903_InternalParams_t));


Heap size girince sorunsuz derlendi. Fonksiyonum olması gerektiği gibi çalışıyor. Ancak nedense bu fonksiyon birkaç kez çalıştıktan sonra PIC resetleniyor. İlk başta stack overFlow oluyor sandım ancak sonradan bu malloc ile ilgili olduğunu tespit ettim. Nasıl bir kullanım hatası yapmış olabilirim?
Başlık: Ynt: malloc kullanınca PIC resetleniyor.
Gönderen: MrDarK - 30 Ocak 2015, 23:32:37
Hocam selam ;

Daha önce malloc komutunu kullanmadım, biraz araştırdığımla hemen şöyle birşey sormak istedim. Heap alan içinde FE_STV0903_InternalParams_t boyutunda yer açıp kullanıyorsunuz, kullanım sonunda açtığınız alanı free olarak boşaltıyor musunuz ? Free olarak boşaltılmadığında memory leak isimli probleme sebep oluyormuş.

Aşağıda örnek bir malloc kullanımı var


#include<stdio.h>

int main()
{
int *ptr_one;

ptr_one = (int *)malloc(sizeof(int));

if (ptr_one == 0)
{
printf("ERROR: Out of memory\n");
return 1;
}

*ptr_one = 25;
printf("%d\n", *ptr_one);

free(ptr_one);

return 0;
}


Alıntı Yap
"Memory leak", programın kullandığı hafıza ile işi bittiği halde ilgili hafıza bloğunu serbest bırakmaması durumudur. Bu durum gerçekte kullanılmayan hafıza bloklarının referans edilmeye devam edilmesinden veya Native resource'ların düzgün bir şekilde serbest bırakılmamasından kaynaklanmaktadır.

Zaman içerisinde programın sürekli hafıza kullanması, fakat kullandığı hafızayı işi bittiğinde bırakmaması, memory leak'in giderek büyümesine bundan dolayı yeterince uzun süre çalışan uygulamalarda sistem kaynaklarının kritik miktarlarda tüketilmesine ve uygulamanın hata verip kapanmasına sebep olmaktadır.
Başlık: Ynt: malloc kullanınca PIC resetleniyor.
Gönderen: XX_CİHAN_XX - 31 Ocak 2015, 00:00:40
Teşekkürler hocam free() fonksiyonu sorunu çözdü :)
Başlık: Ynt: malloc kullanınca PIC resetleniyor.
Gönderen: Burak B - 31 Ocak 2015, 10:28:45
@XX_CİHAN_XX ne için kullanıyorsun bilmiyorum ama yerinde olsam malloc kullanımından mümkün mertebe kaçınırdım. Çok zaruri değilse statik buffer ile çözmeni tavsiye ederim işini.