Opened 4 years ago

Closed 4 years ago

#766 closed ожидаются исправления (задача сдана)

WW #14

Reported by: Obryadina Alexandra Owned by: Obryadina Alexandra
Component: WW_exceptions Version: 2.0
Keywords: Cc:

Description


Change History (6)

comment:1 Changed 4 years ago by Egor Suvorov

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

comment:2 Changed 4 years ago by Obryadina Alexandra

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

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

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

При перемножении вылетает не пойманный bad_alloc. Также при вылете пойманного bad_alloc исходная матрица ломается. А вроде как не должна. Можно сделать так, чтоб ничего не ломалось.

          bool flag = true;
            try {
                value = regs[index].get(row, col);
            } catch(MatrixException& e) {
                std::cout << e.what() << std::endl;
                flag = false;
            }
            if (flag)
                std::cout << value << "\n";

Зачем здесь flag?

возможно, стоит использовать более конкретный базовый класс для исключений, чем std::exception.
std::out_of_range_error, std::runtime_error... https://en.cppreference.com/w/cpp/error


7

comment:4 Changed 4 years ago by Obryadina Alexandra

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

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

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

Чтение номера регистра стоит выделить в отдельную функцию. И завернуть все тело цикла обработки команд в один общий блок try, чтобы не ловить одно и то же в каждой ветке.

bad_alloc при чтении должен пролетать дальше методов класса Matrix, либо вызывать другое исключение -- иначе вызывающий код не узнает об ошибке.

Matrix::Matrix(int rows_, int cols_) : rows(rows_), cols(cols_) {}

После вызова этого конструктора, нельзя использовать метод get -- будет UB.
Публичный конаструктор должен создавать готовый к использованию объект. Либо не быть публичным.


8

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

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