Gönderen Konu: malloc kullanınca PIC resetleniyor.  (Okunma sayısı 1263 defa)

Çevrimdışı XX_CİHAN_XX

  • Profesyonel Üye
  • *****
  • İleti: 2363
malloc kullanınca PIC resetleniyor.
« : 31 Ocak 2015, 14: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.

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.

Çevrimdışı MrDarK

  • Global Moderator
  • Profesyonel Üye
  • *****
  • İleti: 1557
  • Gelecekten geçmişe..
Ynt: malloc kullanınca PIC resetleniyor.
« Yanıtla #1 : 31 Ocak 2015, 14: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

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

Çevrimdışı XX_CİHAN_XX

  • Profesyonel Üye
  • *****
  • İleti: 2363
Ynt: malloc kullanınca PIC resetleniyor.
« Yanıtla #2 : 31 Ocak 2015, 15:00:40 »
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.

Çevrimdışı Burak B

  • Profesyonel Üye
  • *****
  • İleti: 1316
Ynt: malloc kullanınca PIC resetleniyor.
« Yanıtla #3 : 01 Şubat 2015, 01: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.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle