Opened 4 years ago

Closed 4 years ago

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

WW #11

Reported by: Obryadina Alexandra Owned by: Дмитрий Свиридкин
Component: WW cpp_io Version: 3.0
Keywords: Cc:

Description


Change History (6)

comment:1 Changed 4 years ago by Дмитрий Свиридкин

Owner: changed from Дмитрий Свиридкин to Obryadina Alexandra
Type: ожидается проверкаожидаются исправления

Что-то не так с чтением из бинарного файла. Некоторые записи почему-то пропускаются.

  a.add(e);
  delete e;

Как-то это неправильно. Вы владение указателем передаете, а потом его внезапно убивате.
В блоках определения типа (if-else) можно не дублировать чтение. Его можно вынести.

Отступы у вас местами совсем пропали.

в манипуляторе write_c_str незачем делать копию строки.

Однобуквенные переменные в сигнатурах -- зло, а однобуквенная переменная l -- страшное зло.

comment:2 Changed 4 years ago by Дмитрий Свиридкин

Version: 1.0

comment:3 Changed 4 years ago by Obryadina Alexandra

Owner: changed from Obryadina Alexandra to Дмитрий Свиридкин
Type: ожидаются исправленияожидается проверка
Version: 1.02.0

comment:4 Changed 4 years ago by Дмитрий Свиридкин

Owner: changed from Дмитрий Свиридкин to Obryadina Alexandra
Type: ожидается проверкаожидаются исправления

И все-таки, зачем создавать, читать, а потом копировать? Просто создайте на куче, считайте и отдайте тот же указатель. --- только поставьте/уберите const там, где нужно.

Конструктор копий дублирует код просто конструктора -- ему можно делегировать.

Магические константы для типов лучше заменить на именованные или enum.

Единый синтаксис для дописывания в массив (cin >> array; file >> array) -- это хорошо

Память подтекает

==31269== HEAP SUMMARY:
==31269==     in use at exit: 153 bytes in 11 blocks
==31269==   total heap usage: 48 allocs, 37 frees, 90,611 bytes allocated
==31269== 
==31269== 74 bytes in 5 blocks are definitely lost in loss record 1 of 2
==31269==    at 0x483B583: operator new[](unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==31269==    by 0x10B31E: SalesManager::read_bin(std::basic_ifstream<char, std::char_traits<char> >&) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_11/check/lab_11/lab_11)
==31269==    by 0x10B9F4: operator>>(std::basic_ifstream<char, std::char_traits<char> >&, Employee&) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_11/check/lab_11/lab_11)
==31269==    by 0x10BFDB: operator>>(std::basic_ifstream<char, std::char_traits<char> >&, EmployeesArray&) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_11/check/lab_11/lab_11)
==31269==    by 0x10A87C: main (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_11/check/lab_11/lab_11)
==31269== 
==31269== 79 bytes in 6 blocks are definitely lost in loss record 2 of 2
==31269==    at 0x483B583: operator new[](unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==31269==    by 0x10B42D: Developer::read_bin(std::basic_ifstream<char, std::char_traits<char> >&) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_11/check/lab_11/lab_11)
==31269==    by 0x10B9F4: operator>>(std::basic_ifstream<char, std::char_traits<char> >&, Employee&) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_11/check/lab_11/lab_11)
==31269==    by 0x10C023: operator>>(std::basic_ifstream<char, std::char_traits<char> >&, EmployeesArray&) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_11/check/lab_11/lab_11)
==31269==    by 0x10A87C: main (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_11/check/lab_11

7.7/10

comment:5 Changed 4 years ago by Obryadina Alexandra

Owner: changed from Obryadina Alexandra to Дмитрий Свиридкин
Type: ожидаются исправленияожидается проверка
Version: 2.03.0

comment:6 Changed 4 years ago by Дмитрий Свиридкин

Resolution: задача сдана
Status: assignedclosed
	} else {
	    stream.setstate(std::ios::failbit);
	}
    stream >> *employee;

Тут где-то должен быть return. Иначе UB


9.5

Note: See TracTickets for help on using tickets.