Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Vallgrind memory leak in C programma

Pagina: 1
Acties:

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 23:15
Voor mijn programma pilight heb ik de volgende library welke een webgui serveert:
C:
1
/* ** Snip 300 regels code ** */


Echter vindt er een geheugen lek plaats in regel 275. Dit lek is alleen aanwezig tijdens het afsluiten van het programma en niet zolang ik het programma gebruik. Daarnaast blijft ook de omvang van het lek 1025 bytes oftewel de BUFFER_SIZE.

Opvallend is ook dat dit lek weg is zodra ik alle optimalizaties uit zet. Heeft iemand een idee hoe ik dit lek op moet lossen?

[ Voor 121% gewijzigd door CurlyMo op 09-09-2013 11:03 ]

Sinds de 2 dagen regel reageer ik hier niet meer


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Doe eens even een uitgeklede testcase maken. Niet alleen voor ons en omdat niemand zin heeft naar 300+ regels code te gaan lopen staren, maar ook voor jezelf. Dat troubleshoot een stuk handiger en van de code die ik net ge*snipped* heb is een hele bak meuk totaal overbodig/irrelevant.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 23:15
Dat zou ik wel willen, maar ik zou op dit moment niet weten wat nu wel en wat niet bijdraagt aan het lek.

Sinds de 2 dagen regel reageer ik hier niet meer


Verwijderd

Hergebruik je buffer en alloceer niet steeds een nieuwe :?
Waarom heb je hier uberhaupt een wrapper functie voor geschreven?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
CurlyMo schreef op woensdag 28 augustus 2013 @ 19:04:
Dat zou ik wel willen, maar ik zou op dit moment niet weten wat nu wel en wat niet bijdraagt aan het lek.
Dan ontdoe je je code van een aantal zaken en kijk je of 't probleem nog optreedt. Zo nee: je hebt iets weggemikt waardoor 't probleem ontstond. Zo ja: ontdoe je code wederom van zaken. Totdat je je probleem gereduceerd hebt tot een "handvol" regels code (zeg < 75). Basis debuggen / troubleshooten.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • EddoH
  • Registratie: Maart 2009
  • Niet online

EddoH

Backpfeifengesicht

Zoals Cheetah eigenlijk al zegt: wanneer free je de gereturnde buffer?

[ Voor 7% gewijzigd door EddoH op 28-08-2013 19:18 ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 03:08
Die socket_read() functie wordt aangeroepen in een aparte thread, zo te zien. Als het programma exit zonder eerst die thread op een nette manier of te sluiten, dan kan het prima voorkomen dat die thread slaapt omdat de read() call blockt wanneer er geen data te lezen is, terwijl 'ie op dat moment inderdaad een buffer gealloceerd heeft die nog niet is vrijgegeven.

Dat is natuurlijk niet echt een memory leak, maar als je toch al het geheugen wil opruimen bij het afsluiten, moet je zorgen dat die thread netjes afsluit voordat je exit, bijvoorbeeld door de socket te sluiten zodat die functie returnt.

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 23:15
De oplossing leek inderdaad in de tip van Cheetah te zitten waarvoor dank. Aangezien ik geen 300 regels code kan plaatsen is een diff het makkelijkste:
https://github.com/piligh...fab86483b17909de66#diff-3

Nieuwe regels specifiek voor dit lek zijn:
#47
#65
#199 - 205
#278
#299 - 301

Bedankt!

Sinds de 2 dagen regel reageer ik hier niet meer

Pagina: 1