Syntaktické chyby (Syntax Errors)
- Syntaktické chyby se vyskytují, když kód neodpovídá gramatickým pravidlům jazyka C.
- Syntaktické chyby jsou odhaleny kompilátorem, který poskytne chybová hlášení s uvedením řádku a typu chyby.
Příklady syntaktických chyb
- Chybějící středník:
int a = 5 // Chybějící středník
- Nesprávně uzavřený blok kódu:
if (a > 5) { printf("a is greater than 5"); // Chybějící uzavírací závorka
Sémantické chyby (Semantic Errors)
- Sémantické chyby vznikají, když kód sice syntakticky správný, ale logicky chybný.
- Kompilátor je nedokáže detekovat, protože neporušují pravidla jazyka.
- Detekce: Tyto chyby se často projeví během běhu programu a vyžadují testování a ladění.
Příklady sémantických chyb
- Nesprávná inicializace proměnné:
int a = 5; int b = a / 0; // Dělení nulou
- Použití nesprávného operátoru:
if (a = 5) { // Místo '==' je použito '=' printf("a is equal to 5"); }
Chyby během běhu programu (Runtime Errors)
- Chyby během běhu se projeví při spuštění programu.
- Může jít o chyby, které způsobí pád programu nebo nepředvídatelné chování.
- Detekce: Použití ladicích nástrojů jako GDB nebo Valgrind, které mohou pomoci identifikovat místo a příčinu chyby.
Příklady běhových chyb
int arr[5]; arr[10] = 3; // Přístup mimo rozsah pole
- Nebo
int *ptr = NULL; int val = *ptr; // Dereferencování NULL pointeru
Logické chyby (Logic Errors)
- Logické chyby vznikají, když kód neprovádí zamýšlenou činnost.
- Program běží bez chyb, ale výsledky nejsou správné.
- Detekce: Pečlivé testování a kontrola výsledků, někdy použití unit testů nebo jiných testovacích technik.
Příklady logických chyb
- Nesprávný algoritmus:
int sum = 0; for (int i = 1; i <= 10; i++) { sum -= i; // Místo 'sum += i' }
Chyby ve správě paměti (Memory Management Errors)
- Chyby ve správě paměti zahrnují úniky paměti, dvojité uvolnění paměti a přístupy k neplatným paměťovým oblastem.
- Detekce: Nástroje jako Valgrind mohou pomoci odhalit chyby v alokaci a uvolňování paměti.
Příklad chyb ve správě paměti
- Únik paměti:
int *ptr = (int *)malloc(sizeof(int) * 10); // Nedochází k volání free(ptr);
- Dvojité uvolnění paměti:
free(ptr); free(ptr); // Dvojité uvolnění
Chyby typové kompatibility (Type Compatibility Errors)
- Tyto chyby se vyskytnou, když se pokusíme provést operaci s nesprávným typem dat.
- Kompilátor často upozorní na potenciální problémy, ale některé chyby mohou být detekovány až během běhu programu.
Příklad chyby typové kompatibility
float *fptr; int *iptr = (int *)fptr; // Nesprávné přetypování bez explicitního záměru
Hledání chyb:
- Valgrind: Nástroj Valgrind poskytuje detekci memory leaks a dalších chyb paměti pomocí nástrojů jako Memcheck.
- Statická analýza: Některé nástroje pro statickou analýzu kódu mohou identifikovat potenciální chyby paměti a nedefinované chování v kódu.
- Manuální inspekce kódu: Pečlivé prohlížení kódu s ohledem na správu paměti a manipulaci s ukazateli může odhalit chyby, jako jsou memory leaks a segmentační chyby.
Navigace
Předchozí: Principy adresování a práce s pointery v jazyce C Následující: Organizace kódu v jazyce C Celý okruh: 3. Programovací jazyky a programování