25. juli 2006 - 05:59Der er
13 kommentarer og 2 løsninger
memory leak?
hejsa.. jeg er i gang med et projekt som har en del parsing. den kører i en while loop til når der modtages data på en socket. men det er så ikke her problemet ligger, men at når der modtages en meget lang streng som der parses, crasher programmet. så ville jeg meget gerne høre hvad dette kan skyldes? jeg har spurgt mig lidt omkring og har fået at vide det muligvis er en memory leak jeg har. MEN så vidst jeg ved får man kun memory leak ved brug af new operatoren uden at bruge delete, og ved allokering af memory uden at free'e - osv. osv. men jeg bruger ingen af delene! parseren bruger strstr() og strchr() og strncpy() og så smider den de ting den har fundet, ind i en vector som class type.
jeg glemte at tilføje: hvis programmet ikke crasher med det samme, så sker det senere når det har stået og kørt i en del timer. dens cpu forbrug er normalt i starten, men memory forbruget stiger konstant og til sidst crasher programmet.
det er som om det er tilfældigt om den crasher lige i starten, nogen gange gør den ikke og andre gange gør den. jeg har sat den til at printe tekst ud hvor de forskellige ting sker i parsingen. og programmet crasher her:
Den vector du smider det ind i skal den smide det væk på noget tidspunkt, hvis nej, så vokser den jo bare, hvis ja hvordan smider du det i og hvordan fjerner du det igen, lidt kode tak.
tmpa og tmpb can begge være NULL men det har du jo set.
ja det er jeg godt klar over, men vector virker fint, inge problemer der. det er generelt bare programmet der står og bruger mere og mere memory (også selv om jeg har fjernet alt parsing, så den kun direkte printer rå data).
Det vil sige du har taget det kode ud hvor du ligger ind i en vector og den stiger stadig? For du lukker dine sockets når du er færdig med at bruge dem?
Har du den anden snip kode i dit while loop hvor du laver parsing? Eller misforstår jeg? For så opretter du nye tråde hele tiden? (Du lukker handle, men tråden kører stadig i det uendelige da while(1) {} aldrig forlades...) Har du kikket på antal tråde i dit program, om det antal bliver ved med at stige?
Btw. hvis buffer er en global variabel eller lign. bør du nok beskytte den med et mutex eller lign.
ja okay nu har jeg sat den til at starte thread'en lige før min while loop og det har hjulpet på det, men det er som om hver gang koden bliver kaldt så stiger memory forbruget. jeg har ændret lidt i den nu:
char keepalive[] = "g\n";
while (1) { if (bConnected) client.send((void*)keepalive, strlen(keepalive));
Sleep(300000); }
er der ikke noget jeg kan gøre for at hindre den i det?
nej den virker fint nu, det er kun lige éen gang den stiger meget lidt i memory efter at have startet thread'en :) tak for hjælpen. du må lige ligge et svar..
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.