Differences

This shows you the differences between two versions of the page.

Link to this comparison view

programare:good-practices [2020/10/07 17:38]
dorinel.filip
programare:good-practices [2020/10/07 18:26] (current)
dorinel.filip [Memory leaks]
Line 1: Line 1:
 +
 ====== 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 =====
  
-Alocarea de memorie este un subiect care pune probleme multora atunci când fac primii pași în utilizarea limbajului C. În această secțiune, atragem atenția asupra unor elemente importante referitoare la alocarea de memorie și lucrul cu fișiere.+Alocarea de memorie este un subiect care pune probleme multora atunci când fac primii pași în utilizarea limbajului C. 
 + 
 +În această secțiune, atragem atenția asupra unor elemente importante referitoare la alocarea de memorie și lucrul cu fișiere.
  
 <​note>​Recomandăm citirea acestei secțiuni după parcurgerea laboratoarelor de ''​Alocare dinamică de memorie'',​ respectiv ''​Fișiere''​.</​note>​ <​note>​Recomandăm citirea acestei secțiuni după parcurgerea laboratoarelor de ''​Alocare dinamică de memorie'',​ respectiv ''​Fișiere''​.</​note>​
Line 15: 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 93: 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 110: 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 131: 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. ​
programare/good-practices.1602081481.txt.gz · Last modified: 2020/10/07 17:38 by dorinel.filip
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0