This shows you the differences between two versions of the page.
programare:good-practices [2020/10/07 17:51] darius.neatu [Bune practici și erori frecvente în C] |
programare:good-practices [2020/10/07 18:26] (current) dorinel.filip [Memory leaks] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | **Responsabili:** | ||
- | * [[ion_dorinel.filip@cti.pub.ro|Dorinel Filip]] (2018-2020) | ||
- | * [[neatudarius@gmail.com|Darius Neațu ]] (2018-2020) | ||
====== Bune practici și erori frecvente în C ====== | ====== Bune practici și erori frecvente în C ====== | ||
- | În această ghid facem o trecere în revistă a câtorva bune practice și erori frecvente de codare în limbajul C. | + | **Responsabili:** |
+ | * [[ion_dorinel.filip@cti.pub.ro|Dorinel Filip]] (2020) | ||
+ | * [[neatudarius@gmail.com|Darius Neațu]] (2020) | ||
+ | |||
+ | |||
+ | În aceast ghid facem o trecere în revistă a câtorva bune practice și erori frecvente de codare în limbajul C. | ||
===== Erori frecvente în alocarea de memorie și lucrul cu fișiere ===== | ===== Erori frecvente în alocarea de memorie și lucrul cu fișiere ===== | ||
Line 21: | Line 23: | ||
<note warning>Atunci când folosim memorie alocată dinamic (cu ''malloc(...)'', ''calloc(...)'' etc.) trebuie să avem în vedere să și dealocăm memoria atunci când nu o mai folosim!</note> | <note warning>Atunci când folosim memorie alocată dinamic (cu ''malloc(...)'', ''calloc(...)'' etc.) trebuie să avem în vedere să și dealocăm memoria atunci când nu o mai folosim!</note> | ||
- | Prin utilizarea utilitarului [[https://valgrind.org|Valgrind]] checker-ul folosit la notarea automată a temelor poate descoperi execuțiile care lasă memorie nedealocată, iar acest lucru va fi depunctat, conform enunțului temei repective. | + | <note>Prin utilizarea utilitarului [[https://valgrind.org|Valgrind]] checker-ul folosit la notarea automată a temelor la Seria CA poate descoperi execuțiile care lasă memorie nedealocată, iar acest lucru va fi depunctat, conform enunțului temei repective.</note> |
==== Neînchiderea fișierelor ==== | ==== Neînchiderea fișierelor ==== | ||
Line 99: | Line 101: | ||
scanf("%d", &n); | scanf("%d", &n); | ||
- | while(n < 0 || n > MAX_SIZE) { | + | while(n <= 0 || n > MAX_SIZE) { |
- | printf("Numarul este prea mare, te rog introdu un nr. din [0, %d]\n", MAX_SIZE); | + | printf("Numarul este prea mare, te rog introdu un nr. din (0, %d]\n", MAX_SIZE); |
scanf("%d", &n); | scanf("%d", &n); | ||
} | } | ||
Line 116: | Line 118: | ||
scanf("%d", &n); | scanf("%d", &n); | ||
- | while(n < 0) { | + | while(n <= 0) { |
printf("n trebuie sa fie un numar pozitiv. Reincearca!\n"); | printf("n trebuie sa fie un numar pozitiv. Reincearca!\n"); | ||
scanf("%d", &n); | scanf("%d", &n); | ||
Line 137: | Line 139: | ||
Pentru soluția 1 se observă că pune în responsabilitatea programatorului determinarea lui 'MAX_SIZE', care poate interveni ca o limitare nejustificată a funcționalității programului. | Pentru soluția 1 se observă că pune în responsabilitatea programatorului determinarea lui 'MAX_SIZE', care poate interveni ca o limitare nejustificată a funcționalității programului. | ||
- | Un cititor al soluției 2 poate reclama contradicțiecu recomandarea de a folosi memorie alocată static dacă dealocarea se va face în același context și dimensiunea alocată nu este mare. Totuși, codul nu garantează că n este un număr mic. | + | Un cititor al soluției 2 poate reclama contradicție cu recomandarea de a folosi memorie alocată static dacă dealocarea se va face în același context și dimensiunea alocată nu este mare. Totuși, codul nu garantează că n este un număr mic. |
<note>**Nu** este recomandată combinarea (pe cazuri) a celor 2 soluții, deoarece complică foarte mult codul, iar plusul de performanță este rareori semnificativ. | <note>**Nu** este recomandată combinarea (pe cazuri) a celor 2 soluții, deoarece complică foarte mult codul, iar plusul de performanță este rareori semnificativ. |