malloc kullanınca PIC resetleniyor.

Başlatan XX_CİHAN_XX, 31 Ocak 2015, 02:10:18

XX_CİHAN_XX

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.

Kod Seç
      
      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?
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

MrDarK

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

Kod Seç

	
#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ı
"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.
Picproje Eğitim Gönüllüleri ~ MrDarK

XX_CİHAN_XX

Teşekkürler hocam free() fonksiyonu sorunu çözdü :)
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

Burak B

@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.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle