Zpětná vazba k první sadě

Časté konkrétní problémy

Úkol 1

  1. Opakování kódu.
  2. Záporné dluhy.
  3. strcmp vs ==

Úkol 2

  1. Interpolation search: celočíselné vs float děleni.

Obecně: třídení by nemělo být součástí algoritmu binary/interpolation search, protože pak degraduje jeho složitost.

Úkol 3

  1. Kód seznamu zbytečně složitý.
  2. Hrozí dereference NULL ukazatele.

Úkol 4

  1. Fronta může přetéct.
  2. Hrozí dereference NULL ukazatele.

Úkol 5

  1. Kód seznamu zbytečně složitý.
  2. tree* t = malloc(sizeof(tree)); V print, depth, … je dost podezřelé (vizte B).
  3. Alokace uzlu v add i ve volání, ve kterém se nepřidává (t.j. alokace navic a bez free; vizte B).
  4. Hrozí dereference NULL ukazatele.

Obecné problémy

  1. Nesmyslný kód typu:
if (uzel->next == NULL)
{
  printf("%d", uzel->data);ř
}
else
{
	printf("%d,", uzel->data);
} 
  1. Chybějící free (či míchání významu u vytváření ukazatele a alokace paměti).
  2. Nedodržené zadání (typy atp.).
  3. Ignorovaná varování kompilátoru (téměř vždy to značí fatální chybu).
  4. Běh konči chybou - typicky segmentation fault (SIGSEGV).
  5. Příkaz return ukončuje funkci. Nic za ním už se nevykoná (a tedy to nemá smysl psát)
  6. Struktury používané jen v rámci funkce, která je alokuje, nemusíte alokovat dynamicky (typicky tree wrapper okolo uzlu). Toto není chyba, pokud nezapomenete na free.
  7. Takováto konstrukce nevytváří kopii pole: struct debtor debts_copy[] = debts;
  8. Kód nelze zkompilovat.

Další komentáře