Kezdőoldal » Számítástechnika » Programozás » Miért jelez folyamatosan...

Miért jelez folyamatosan errort a programom?

Figyelt kérdés

A c programom itt található: [link]


Az a problémám, hogyha a Makefile-lal lefordítom a kódot, akkor mindig error-t ír ki, pontosabban Memory leak-et a copyra,decre és a copykeyre. Azonban ha valgrinddel átellenőrzöm a programom, akkor ott mutatja, hogy van 3 alloc és megvan a 3free is. Mi lehet a baj? Mit csinálok rosszul? Még nagyon kezdő vagyok a dinamikus memóriakezelésben, de szeretném megtanulni.


Minden kedves válaszolónak nagyon köszönök minden segítséget!



#alloc
2016. márc. 26. 19:50
 1/8 anonim ***** válasza:
De mi ír errort? És mi a pontos hibaüzenet?
2016. márc. 26. 20:06
Hasznos számodra ez a válasz?
 2/8 A kérdező kommentje:

Hm, sikerült megoldanom, csak nem tudom, hogy miért működik. A 18. sorra írt ki errort, és ezt: Memory leak: copy, ugyanúgy a többi sztringre is, amihez allocot használtam, de így megoldottam, és már nem ír ki errort:


for (i=0;i<k;i++)

{

copykey[i]=toupper(key[i]);

}

for (i=0;i<k;i++)

{

if(!(isalpha(copykey[i])))//megcseréltem, a key helyett copykey-t tettem

copykey=NULL; //gondolom emiatt jó, de miért is kell NULL értéket adni neki?

return NULL;

}

2016. márc. 26. 20:14
 3/8 anonim ***** válasza:

Memory leak attól van hogy ha belép a 17. sorba, akkor a copy és copykey soha nem lesz felszabadítva, ezért a 17 sornál a return helyett előbb fel kéne szabadítani őket:


if(!(isalpha(key[i])))

return NULL;


belyett


if(!(isalpha(key[i]))) {

free(copykey);

free(copy);

return NULL;

}

2016. márc. 26. 20:37
Hasznos számodra ez a válasz?
 4/8 anonim ***** válasza:
A dec-re pedig tévesen de azért ír memory leak-et, mert a függvényben belül foglalod le, de a függvényen kívül szabadítod föl. E helyett inkább függvényen kívül foglald le és paraméterként add át a terület címét a függvény számára.
2016. márc. 26. 20:39
Hasznos számodra ez a válasz?
 5/8 A kérdező kommentje:
Köszönöm szépen! Átírtam így, de most Segmentation faultot ír ki, ha lefuttatom a programot.
2016. márc. 26. 21:18
 6/8 anonim ***** válasza:
Túlindexelsz valami tömböt.
2016. márc. 27. 09:58
Hasznos számodra ez a válasz?
 7/8 A kérdező kommentje:
Esetleg valaki megtudná nézni, hogy hol? Mert én nem igazán látom, hogy hol indexeltem volna túl.
2016. márc. 27. 14:06
 8/8 A kérdező kommentje:
Sikerült megoldani! Már működik! Nem volt túlcsordulás, csak lemaradt egy zárójel, egy nagyon fontos zárójel.
2016. márc. 27. 14:38

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!