Najčešća greška koju pravim jeste nepažnja u radu sa memorijom. Ne znam zašto, ali iako se trudim da pazim gde ide svako malloc, a gde free, gde new, a gde delete ili šta već postoji analogno na nekom desetom jeziku obavezno se potkrade greška. Čak mogu i da na prste nabrojim situacije, i iako to sve znam ponovo napravim glupost. Lepo inicijalizujem pokazivač, prenesem ga u drugu funkciju, promenim vrednost, obradim, oslobodim i onda u funkciji odakle je “potekao” ponovo uradim free. Druga mogućnost je da prenesem neinicijalizovani pokazivač u funkciju, a da po prekidu funkcije očekujem inicijalizovani iako to nisam uradio i onda sve dalje ide lepo pa se čak i gornja poruka pojavi na ekranu. Za divno čudo, greške sa buffer overflow-om mi se retko dešavaju, valjda sam na to naučio da pazim jer o tome svi pišu i pričaju.

Problem je kada se ovakva neka greška zavuče, ili kada podatke očitavam sa nepouzdanog izvora pa oni i ne stignu, a ja planiram da uradim memcpy, pa onda posle free zato što je posle u glomaznom kodu jako teško pronaći i otkloniti. Plus, što se greška uopšte ne mora manifestovati redovno porukom iz naslova pa problem postaje još veći.

Curenje memorije je pak druga priča. I tu nisam naivan, ali ipak češće oslobađam isto par puta, nego što zaboravim da oslobodim inicijalizovanu memoriju.

A onda kreće pokretanje programa pod valgrind-om uz neki JIT debuger što zna da potraje i potraje kada se radi o GUI aplikacijama koje vole da crtaju svakojake stvari po ekranu, u kombinaciji sa teškom GUI bibliotekom kao što je GTK ili sl.

Kako se braniti od ovakvih grešaka? Uzrok je trenutni manjak koncentracije, nepažnja - baš ono zbog čega mi se često desi da dobijem 3 ili 4 na nekoj proveri iz matematike. Stil pisanja koda ili stalni debug? Prvo je manje efikasno, a drugo nepraktično - naročito kada su rokovi tesni.

I posle neko kaže da se one silne warning poruke slobodno mogu ignorisati, a baš u tom grmu leži zec.