Opened 4 years ago
Closed 4 years ago
#684 closed ожидается проверка (задача сдана)
WW #11
Reported by: | fomenko.ivan | Owned by: | Артур Гулецкий (huletski) |
---|---|---|---|
Component: | WW cpp_io | Version: | 2.0 |
Keywords: | Cc: |
Description
Change History (3)
comment:1 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|---|
Version: | → 1.0 |
comment:2 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
Честно боролся с клонами, но решил обойти их стороной
comment:3 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Проблемы при работе с памятью, программа не работает на примере из условия, другие тесты тоже не проходят -> -2.5:
{lab_11}[2080]$ pwd && svn up && svn status /home/hfx/dvl/cpp19/fomenko.ivan/lab_11 Updating '.': At revision 2770. {lab_11}[2081]$ make mkdir -p obj g++ -O2 -Wall -Werror -std=c++11 -Iinclude -g -c -MMD -o obj/bin_manip.o src/bin_manip.cpp g++ -O2 -Wall -Werror -std=c++11 -Iinclude -g -c -MMD -o obj/main.o src/main.cpp g++ -O2 -Wall -Werror -std=c++11 -Iinclude -g -c -MMD -o obj/employees.o src/employees.cpp g++ obj/bin_manip.o obj/main.o obj/employees.o -o lab_11 {lab_11}[2082]$ valgrind ./lab_11 ==4899== Memcheck, a memory error detector ==4899== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al. ==4899== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info ==4899== Command: ./lab_11 ==4899== add 2 Joe 100 20 300 add 1 Billy 1000 1 list 1. Sales Manager Name: Joe Base Salary: 100 Sold items: 20 Item price: 300 2. Developer Name: Billy Base Salary: 1000 Has bonus: + == Total salary: 2160 save example.edb ==4899== Syscall param write(buf) points to uninitialised byte(s) ==4899== at 0x552C2C0: __write_nocancel (syscall-template.S:84) ==4899== by 0x4F00C85: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) ==4899== by 0x4F3EC4F: std::basic_filebuf<char, std::char_traits<char> >::_M_convert_to_external(char*, long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) ==4899== by 0x4F3F0A7: std::basic_filebuf<char, std::char_traits<char> >::overflow(int) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) ==4899== by 0x4F3EDC1: std::basic_filebuf<char, std::char_traits<char> >::_M_terminate_output() (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) ==4899== by 0x4F420BA: std::basic_filebuf<char, std::char_traits<char> >::close() (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) ==4899== by 0x4F444F4: std::basic_ofstream<char, std::char_traits<char> >::~basic_ofstream() (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) ==4899== by 0x4014D5: main (main.cpp:34) ==4899== Address 0x5b1a996 is 38 bytes inside a block of size 8,192 alloc'd ==4899== at 0x4C2E80F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==4899== by 0x4F3EB03: std::basic_filebuf<char, std::char_traits<char> >::_M_allocate_internal_buffer() (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) ==4899== by 0x4F42C62: std::basic_filebuf<char, std::char_traits<char> >::open(char const*, std::_Ios_Openmode) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) ==4899== by 0x4F43933: std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::_Ios_Openmode) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) ==4899== by 0x4014C0: main (main.cpp:33) ==4899== add 1 Bobby 500 0 load example.edb list 1. Sales Manager Name: Joe Base Salary: 100 Sold items: 20 Item price: 300 2. Developer Name: Billy Base Salary: 1000 Has bonus: + 3. Developer Name: Bobby Base Salary: 500 Has bonus: - 4. Sales Manager Name: Joe Base Salary: 100 Sold items: 20 Item price: 300 5. Developer Name: Billy Base Salary: 1000 Has bonus: - == Total salary: 3820 exit ==4899== ==4899== HEAP SUMMARY: ==4899== in use at exit: 73,112 bytes in 11 blocks ==4899== total heap usage: 21 allocs, 10 frees, 92,768 bytes allocated ==4899== ==4899== LEAK SUMMARY: ==4899== definitely lost: 136 bytes in 5 blocks ==4899== indirectly lost: 272 bytes in 5 blocks ==4899== possibly lost: 0 bytes in 0 blocks ==4899== still reachable: 72,704 bytes in 1 blocks ==4899== suppressed: 0 bytes in 0 blocks ==4899== Rerun with --leak-check=full to see details of leaked memory ==4899== ==4899== For counts of detected and suppressed errors, rerun with: -v ==4899== Use --track-origins=yes to see where uninitialised values come from ==4899== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
По коду:
- employees.h:74. тип должен быть
Employee*
, про clone вы написали -> -0.5; - bin_manip.cpp. манипуляторы чтения/записи int32_t в little-endian реализованы частично, т.к. не гарантируется порядок записи байтов (на big-endian платформе значение будет записано неверно) -> -1;
- bin_manip.cpp. отсутствует обработка ошибок (установка failbit) в коде считывания данных (bool - если считалось значение отличное от 0 и 1, c-string - если не был найден нуль-терминатор, в этом случае решение вообще зависнет) -> -1;
- employees.cpp:132. Дублирование кода из main.cpp, почему это плохо обсудили на практике -> -0.75.
+ замечания выше, которые вы решили не исправлять (стиль) -> -0.5
Баллы: 3.75.
Note: See
TracTickets for help on using
tickets.
Решение не собирается:
Если починить компиляцию, решение неверно работает на примере из условия.
Некоторые замечания по коду:
b
;this->
избыточен;Баллы: 2, доделывайте. Перед посылкой новой версии решения убедитесь, что оно работает на примере из условия.