Opened 4 years ago
Closed 4 years ago
#764 closed ожидается проверка (задача сдана)
WW #14
Reported by: | Surkov Petr | Owned by: | Sokolov Viacheslav |
---|---|---|---|
Component: | WW_exceptions | Version: | 3.0 |
Keywords: | Cc: |
Description
Change History (10)
comment:1 Changed 4 years ago by
Owner: | changed from Sokolov Viacheslav to Surkov Petr |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:2 Changed 4 years ago by
Owner: | changed from Surkov Petr to Sokolov Viacheslav |
---|---|
Type: | ожидаются исправления → ожидается проверка |
comment:4 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
9 explicit MatrixSize?() = default;
10 size_t rows = 0, columns = 0;
не лучше ли вместо этого реализовать конструктор по-умолчанию / не требовать конструктор по-умолчанию?
10 static const size_t ARRSZ = 10;
лучше constexpr, чтобы выделить intention (использовать на этапе компиляции)
==5817==ERROR: AddressSanitizer? failed to allocate 0xdfff0001000 (15392894357504) bytes at address 2008fff7000 (errno: 12)
==5817==ReserveShadowMemoryRange? failed while trying to map 0xdfff0001000 bytes. Perhaps you're using ulimit -v
на данных из условия
обработка std::bad_alloc дублируется, что намекает на то, что она расположена не в том месте, где надо
38 Matrix thisCopy(*this); 39 40 sz.columns = otherSz.columns; 41 v.resize(sz.rows); 42 for (auto &row : v) { 43 row.resize(sz.columns); 44 fill(row.begin(), row.end(), 0); 45 } 46
здесь не так уж сложно обеспечить более строгую гарантию исключений; если аллокация не удастся, обьект окажется в сломанном состоянии
adl намеренно используется?
59 is.exceptions(std::istream::failbit | std::istream::badbit);
зачем делать это в этом месте, а не в main?
69 catch (const std::istream::failure& e) {
70 *this = thisCopy;
71 throw MatrixException?("LOAD: invalid file format.");
лучше поменять логику - заполнять копию и если все ок, делать присваивание (в идеале - move)
comment:5 Changed 4 years ago by
Про address_sanitizer понял
62 v.resize(sz.rows, std::vector<int>(sz.columns));
тут ошибка
comment:6 Changed 4 years ago by
по стандарту int может быть 16-битным, поэтому лучше везде использовать типы фиксированного размера
comment:7 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
comment:8 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
9 explicit MatrixSize?(size_t rows_, size_t columns_);
можно вместо конструктора использовать direct initialization
32 struct MatrixException? final {
33 explicit MatrixException?(std::string error_);
34 std::string error;
35 };
какая мотивация делать поле публичным?
22 arr[reg1] *= arr[reg2];
поехало
умножение реализовано неправильно, что легко видеть даже из размерностей
comment:9 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 2.0 → 3.0 |
comment:10 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |