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. | ||