Opened 4 years ago

Closed 4 years ago

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

WW #14

Reported by: Filippov Denis Owned by: Sokolov Viacheslav
Component: WW_exceptions Version: 3.0
Keywords: Cc:

Description


Change History (7)

comment:1 Changed 4 years ago by Egor Suvorov

Owner: changed from Sokolov Viacheslav to Filippov Denis
Type: ожидается проверкаожидаются исправления

comment:2 Changed 4 years ago by Filippov Denis

Owner: changed from Filippov Denis to Sokolov Viacheslav
Type: ожидаются исправленияожидается проверка

comment:3 Changed 4 years ago by Sokolov Viacheslav

Type: ожидается проверкаожидаются исправления

26 std::vector<int> _table = {};
27 int _rows = 0, _cols = 0;

какая мотивация делать инициализацию в заголовочном файле?

==13655== Memcheck, a memory error detector
==13655== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==13655== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==13655== Command: /home/nicesap/HSE/svn/filippov.denis/lab_14/lab_14
==13655== Parent PID: 13654
==13655==
==13655== Conditional jump or move depends on uninitialised value(s)
==13655== at 0x4C32D08: strlen (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==13655== by 0x4F687B9: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28)
==13655== by 0x10C33F: main (in /home/nicesap/HSE/svn/filippov.denis/lab_14/lab_14)
==13655==
==13655==
==13655== HEAP SUMMARY:
==13655== in use at exit: 0 bytes in 0 blocks
==13655== total heap usage: 11 allocs, 11 frees, 91,434 bytes allocated
==13655==
==13655== All heap blocks were freed -- no leaks are possible
==13655==
==13655== For counts of detected and suppressed errors, rerun with: -v
==13655== Use --track-origins=yes to see where uninitialised values come from
==13655== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)

39 MatrixException?(const std::string &what_arg) noexcept;

message?

explicit

по Стандарту int может быть 16-битным

38 _table[y * _cols + x] += matr(y, x)

стоит сделать что-нибудь вроде

int& Matrix::operator()(int row, int col)

и использовать его, чтобы не дублировать код и явно выразить намерение

76 I know about existance of 'strcpy', but I don't know there
77
can be UB (in strcpy). That is why I make copy of 'what' by cycle

в данном случае нужен strncpy

Вообще же сигнатура
MatrixException::MatrixException?(const std::string &what_arg)
избыточна - конструируется от const char*, что приведет к лишнему копированию памяти.
Используйте std::string_view

Непонятна мотивация check_status: есть .exceptions(), который бросит исключение (которое можно перехватить в main и вывести сообщение)

comment:4 Changed 4 years ago by Filippov Denis

Type: ожидаются исправленияожидается проверка
Version: 1.02.0

comment:5 Changed 4 years ago by Sokolov Viacheslav

Type: ожидается проверкаожидаются исправления

10 Matrix(int64_t rows = 0, int64_t cols = 0);
лучше explicit, чтобы Matrix(NULL) не сконструировать случайно

27 std::strncpy(_message, message.begin(), std::max(message.size(), size_t(MAX_MESSAGE_SIZE)));
здесь std::max ломает весь смысл strncpy, нужно просто MAX_MESSAGE_SIZE (константу можно сразу сделать size_t)

If count is reached before the entire string src was copied, the resulting character array is not null-terminated.

для вывода же c-строка должна быть 0-терминированной

registerNumber
имя класса выбивается по стилю от других имен классов

всегда выставляйте .exceptions на failbit, badbit для стандартных потоков ввода/вывода, если не считаете их ожидаемыми

28 /* I understand that this is "megacostyl", but I don't know
29 * how I can avoid copying of code from not const operator().
30 */

Никак. Точнее есть еще более ужасный способ сделать это на шаблонах, но уж лучше копировать.
Тем не менее const_cast - тоже плохое решение. Лучше продублировать код: вынести исключение в отдельную функцию validate..., а вызов validate + обращение по индексу продублировать.

Непонятно, зачем использовать 64 бита для индексации и размерностей.

comment:6 Changed 4 years ago by Filippov Denis

Type: ожидаются исправленияожидается проверка
Version: 2.03.0

comment:7 Changed 4 years ago by Sokolov Viacheslav

Resolution: задача сдана
Status: assignedclosed
Note: See TracTickets for help on using tickets.