Attachments (1)

06-load-bad.vg (3.0 KB) - added by Дмитрий Свиридкин 4 years ago.

Download all attachments as: .zip

Change History (7)

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

Attachment: 06-load-bad.vg added

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

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

ошибок памяти так много, что valgrind упал

Если чтение упадет, исходная матрица сломается. Так не должно быть.

под gcc санитайзеры не дружат с исключениями -- используйте valgrind

	Matrix operator + (Matrix a);
	Matrix operator * (Matrix a);

const? лишнее копирование?

Используйте нижнее подчеркивание в конце имен, а не в начале.

class MatrixException : std::exception
{
public:
	MatrixException(const char* error);

	const char* what() const noexcept;
private:
	const char* _s;
};

Наследование должно быть публичным. what стоит пометить override.

bad_alloc можно ловить на более верхнем уровне, а не в каждой функции.

в функцию get_reg стоит передаваить поток, из которого читать.


6

comment:2 Changed 4 years ago by savrasov.mikhail

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

Fixed

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

Owner: changed from Дмитрий Свиридкин to savrasov.mikhail

При неудавшемся чтении

==9084== Memcheck, a memory error detector
==9084== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==9084== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
==9084== Command: lab_14/lab_14
==9084== Parent PID: 9083
==9084== 
==9084== Conditional jump or move depends on uninitialised value(s)
==9084==    at 0x10CAAC: Matrix::read(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10ADEF: main (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084== 
==9084== Conditional jump or move depends on uninitialised value(s)
==9084==    at 0x10CACB: Matrix::read(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10ADEF: main (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084== 
==9084== Conditional jump or move depends on uninitialised value(s)
==9084==    at 0x483AE10: operator new(unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9084==    by 0x10CAE2: Matrix::read(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10ADEF: main (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084== 
==9084== Conditional jump or move depends on uninitialised value(s)
==9084==    at 0x484193F: memset (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9084==    by 0x10CAFD: Matrix::read(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10ADEF: main (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084== 
==9084== Conditional jump or move depends on uninitialised value(s)
==9084==    at 0x484198A: memset (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9084==    by 0x10CAFD: Matrix::read(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10ADEF: main (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084== 
==9084== Conditional jump or move depends on uninitialised value(s)
==9084==    at 0x48419AA: memset (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9084==    by 0x10CAFD: Matrix::read(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10ADEF: main (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084== 
==9084== Conditional jump or move depends on uninitialised value(s)
==9084==    at 0x48419C9: memset (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9084==    by 0x10CAFD: Matrix::read(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10ADEF: main (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084== 
==9084== Conditional jump or move depends on uninitialised value(s)
==9084==    at 0x10D1D4: std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >::_M_fill_assign(unsigned long, std::vector<int, std::allocator<int> > const&) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10CB1E: Matrix::read(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10ADEF: main (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084== 
==9084== Conditional jump or move depends on uninitialised value(s)
==9084==    at 0x10D1E7: std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >::_M_fill_assign(unsigned long, std::vector<int, std::allocator<int> > const&) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10CB1E: Matrix::read(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10ADEF: main (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084== 
==9084== Conditional jump or move depends on uninitialised value(s)
==9084==    at 0x483AE10: operator new(unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9084==    by 0x10D1F4: std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >::_M_fill_assign(unsigned long, std::vector<int, std::allocator<int> > const&) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10CB1E: Matrix::read(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10ADEF: main (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084== 
==9084== Conditional jump or move depends on uninitialised value(s)
==9084==    at 0x10D21C: std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >::_M_fill_assign(unsigned long, std::vector<int, std::allocator<int> > const&) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10CB1E: Matrix::read(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10ADEF: main (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084== 
==9084== Conditional jump or move depends on uninitialised value(s)
==9084==    at 0x48419FA: memmove (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9084==    by 0x10D239: std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >::_M_fill_assign(unsigned long, std::vector<int, std::allocator<int> > const&) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10CB1E: Matrix::read(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10ADEF: main (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084== 
==9084== Conditional jump or move depends on uninitialised value(s)
==9084==    at 0x4841BA1: memmove (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9084==    by 0x10D239: std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >::_M_fill_assign(unsigned long, std::vector<int, std::allocator<int> > const&) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10CB1E: Matrix::read(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10ADEF: main (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084== 
==9084== Conditional jump or move depends on uninitialised value(s)
==9084==    at 0x4841A55: memmove (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9084==    by 0x10D239: std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >::_M_fill_assign(unsigned long, std::vector<int, std::allocator<int> > const&) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10CB1E: Matrix::read(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10ADEF: main (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084== 
==9084== Conditional jump or move depends on uninitialised value(s)
==9084==    at 0x4841ABC: memmove (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9084==    by 0x10D239: std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >::_M_fill_assign(unsigned long, std::vector<int, std::allocator<int> > const&) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10CB1E: Matrix::read(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10ADEF: main (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084== 
==9084== Conditional jump or move depends on uninitialised value(s)
==9084==    at 0x4841AE4: memmove (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9084==    by 0x10D239: std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >::_M_fill_assign(unsigned long, std::vector<int, std::allocator<int> > const&) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10CB1E: Matrix::read(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10ADEF: main (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084== 
==9084== Conditional jump or move depends on uninitialised value(s)
==9084==    at 0x4841AFD: memmove (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9084==    by 0x10D239: std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >::_M_fill_assign(unsigned long, std::vector<int, std::allocator<int> > const&) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10CB1E: Matrix::read(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10ADEF: main (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084== 
==9084== Conditional jump or move depends on uninitialised value(s)
==9084==    at 0x10CB53: Matrix::read(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084==    by 0x10ADEF: main (in /home/dmis/DATA/WORKSPACE/cpp-labs/lab_14/check/lab_14/lab_14)
==9084== 
==9084== 
==9084== HEAP SUMMARY:
==9084==     in use at exit: 0 bytes in 0 blocks
==9084==   total heap usage: 46 allocs, 46 frees, 117,116 bytes allocated
==9084== 
==9084== All heap blocks were freed -- no leaks are possible
==9084== 
==9084== Use --track-origins=yes to see where uninitialised values come from
==9084== For lists of detected and suppressed errors, rerun with: -s
==9084== ERROR SUMMARY: 108 errors from 18 contexts (suppressed: 0 from 0)

Исключения должны вылетать за пределы операций над матрицами. Иначе вы не как не уведомляете вызывающий код об ошибке.

Операторы, не меняющие объект, определенные как методы, должны быть помечены const.


7

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

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

comment:5 Changed 4 years ago by savrasov.mikhail

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

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

Resolution: задача сдана
Status: assignedclosed
	void get(int32_t x, int32_t y);

А почему void?!?

----------
9.5

Note: See TracTickets for help on using tickets.