Opened 5 years ago

Closed 5 years ago

#374 closed ожидается проверка (задача сдана)

WW_intrusive_list

Reported by: an.alina Owned by: Артур Гулецкий (huletski)
Component: WW_intrusive_list Version: 2.0
Keywords: Cc:

Description


Change History (1)

comment:1 Changed 5 years ago by Артур Гулецкий (huletski)

Resolution: задача сдана
Status: assignedclosed

Работа программы на примере из условия отличается от ожидаемого + ошибки при работе с памятью:

{lab_03}[2306]$ pwd && svn up && svn status
/home/hfx/dvl/cpp19/an.alina/lab_03
Updating '.':
At revision 1376.
{lab_03}[2307]$ make
mkdir obj 
gcc src/clist.c -Iinclude -c -Wall -Wextra -Werror -o obj/clist.o 
gcc src/main.c -Iinclude -c -Wall -Wextra -Werror -o obj/main.o 
gcc obj/clist.o obj/main.o -o lab_03
{lab_03}[2308]$ cat ~/dvl/private-labs/lab_03/check/tests/00-smoke.input 
add 1 2
add 3 6
add 4 6
len
add 1 2
print
sort
rm 1 2
print
rma
print
len
add 2 -4
print
exit
{lab_03}[2309]$ ./lab_03 < ~/dvl/private-labs/lab_03/check/tests/00-smoke.input 
3
(1 2)(4 6)(3 6)(1 2)Unknown command
(4 6)(3 6)0
(2 -4)
{lab_03}[2310]$ cat ~/dvl/private-labs/lab_03/check/expected/00-smoke.out 
3
(1 2) (4 6) (3 6) (1 2)
Unknown command
(4 6) (3 6)

0
(2 -4)
{lab_03}[2311]$ valgrind ./lab_03 < ~/dvl/private-labs/lab_03/check/tests/00-smoke.input 
==17986== Memcheck, a memory error detector
==17986== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==17986== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==17986== Command: ./lab_03
==17986== 
3
(1 2)(4 6)(3 6)(1 2)Unknown command
==17986== Invalid read of size 8
==17986==    at 0x4008D3: remove_point (in /home/hfx/dvl/cpp19/an.alina/lab_03/lab_03)
==17986==    by 0x400C9F: main (in /home/hfx/dvl/cpp19/an.alina/lab_03/lab_03)
==17986==  Address 0x5205638 is 8 bytes inside a block of size 24 free'd
==17986==    at 0x4C2EDEB: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==17986==    by 0x4008CE: remove_point (in /home/hfx/dvl/cpp19/an.alina/lab_03/lab_03)
==17986==    by 0x400C9F: main (in /home/hfx/dvl/cpp19/an.alina/lab_03/lab_03)
==17986==  Block was alloc'd at
==17986==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==17986==    by 0x400839: add_point (in /home/hfx/dvl/cpp19/an.alina/lab_03/lab_03)
==17986==    by 0x400C45: main (in /home/hfx/dvl/cpp19/an.alina/lab_03/lab_03)
==17986== 
(4 6)(3 6)0
(2 -4)==17986== 
==17986== HEAP SUMMARY:
==17986==     in use at exit: 16 bytes in 1 blocks
==17986==   total heap usage: 8 allocs, 7 frees, 5,256 bytes allocated
==17986== 
==17986== LEAK SUMMARY:
==17986==    definitely lost: 16 bytes in 1 blocks
==17986==    indirectly lost: 0 bytes in 0 blocks
==17986==      possibly lost: 0 bytes in 0 blocks
==17986==    still reachable: 0 bytes in 0 blocks
==17986==         suppressed: 0 bytes in 0 blocks
==17986== Rerun with --leak-check=full to see details of leaked memory
==17986== 
==17986== For counts of detected and suppressed errors, rerun with: -v
==17986== ERROR SUMMARY: 2 errors from 1 contexts (suppressed: 0 from 0)

Замечания:

  • отсутствует единый стиль отступов -> -0.5;
  • скобка, закрывающая блок кода, должна находиться на уровне конструкции языка, к которой относится (e.g. main.c:29) -> -0.5;
  • функция печати точек должна выводить точки через пробели и печатать символ перевода строки после вывода -> -1.5;
  • пробелы вокруг оператора "->" не ставятся обычно (а->b, а не a -> b);
  • при выполнении команды exit программа завершает работу, не освобождая память, выделенную под head списка -> -1;
  • операция освобождения памяти (main.c:89) написана неверно (head хранит указатель, & - избыточен);
  • функция remove_point реализована неверно: в случае удаления элемента increment часть for-цикла читает уже освобожденную память (cur->next, тогда как cur - элемент уже освобожденного p) -> -1.5

Итог: 7/10

Note: See TracTickets for help on using tickets.