Opened 7 years ago

Closed 7 years ago

Last modified 7 years ago

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

Домашняя работа №4

Reported by: agapova.tatyana Owned by: Vladimir Rutsky
Priority: проверка Milestone:
Component: HA#4 lazy_string Version:
Keywords: Cc: tatjana.agapova@…

Description


Change History (14)

comment:1 Changed 7 years ago by cpptester

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

Tested revision 803 by agapova.tatyana.

Smoke tests

test

stage

result

info

log

run_smoke_test.cpp

gcc62

FAILURE

run_smoke_test-gcc62.log

Common header used in some tests: common.h

comment:2 Changed 7 years ago by cpptester

Tested revision 815 by agapova.tatyana.

Smoke tests

test

stage

result

info

log

run_smoke_test.cpp

gcc62

SUCCESS

run

SUCCESS

valgrind

SUCCESS

run_smoke_test-valgrind.log

gcc62-asan

SUCCESS

asan

SUCCESS

clang-san

FAILURE

run_smoke_test-clang-san.log

Common header used in some tests: common.h

comment:3 Changed 7 years ago by cpptester

comment:5 Changed 7 years ago by cpptester

Tested revision 843 by agapova.tatyana.

Main tests

test

stage

result

info

log

run_aug_plus_c_str_char_traits_no_mem.cpp

gcc62

SUCCESS

run

SUCCESS

valgrind

FAILURE

exit code 1

run_aug_plus_c_str_char_traits_no_mem-valgrind.log

gcc62-asan

SUCCESS

asan

FAILURE

exit code 1

run_aug_plus_c_str_char_traits_no_mem-asan.log

clang-san

SUCCESS

san

SUCCESS

run_aug_plus_c_str_no_mem.cpp

gcc62

SUCCESS

run

SUCCESS

valgrind

FAILURE

exit code 1

run_aug_plus_c_str_no_mem-valgrind.log

gcc62-asan

SUCCESS

asan

FAILURE

exit code 1

run_aug_plus_c_str_no_mem-asan.log

clang-san

SUCCESS

san

SUCCESS

run_aug_plus_c_wstr_no_mem.cpp

gcc62

SUCCESS

run

SUCCESS

valgrind

FAILURE

exit code 1

run_aug_plus_c_wstr_no_mem-valgrind.log

gcc62-asan

SUCCESS

asan

FAILURE

exit code 1

run_aug_plus_c_wstr_no_mem-asan.log

clang-san

SUCCESS

san

SUCCESS

run_aug_plus_char_char_traits_no_mem.cpp

gcc62

SUCCESS

run

SUCCESS

valgrind

FAILURE

exit code 1

run_aug_plus_char_char_traits_no_mem-valgrind.log

gcc62-asan

SUCCESS

asan

FAILURE

exit code 1

run_aug_plus_char_char_traits_no_mem-asan.log

clang-san

SUCCESS

san

SUCCESS

run_aug_plus_char_no_mem.cpp

gcc62

SUCCESS

run

SUCCESS

valgrind

FAILURE

exit code 1

run_aug_plus_char_no_mem-valgrind.log

gcc62-asan

SUCCESS

asan

FAILURE

exit code 1

run_aug_plus_char_no_mem-asan.log

clang-san

SUCCESS

san

SUCCESS

run_aug_plus_lazy_str_char_traits_no_mem.cpp

gcc62

SUCCESS

run

SUCCESS

valgrind

FAILURE

exit code 1

run_aug_plus_lazy_str_char_traits_no_mem-valgrind.log

gcc62-asan

SUCCESS

asan

FAILURE

exit code 1

run_aug_plus_lazy_str_char_traits_no_mem-asan.log

clang-san

SUCCESS

san

SUCCESS

run_aug_plus_lazy_str_no_mem.cpp

gcc62

SUCCESS

run

SUCCESS

valgrind

FAILURE

exit code 1

run_aug_plus_lazy_str_no_mem-valgrind.log

gcc62-asan

SUCCESS

asan

FAILURE

exit code 1

run_aug_plus_lazy_str_no_mem-asan.log

clang-san

SUCCESS

san

SUCCESS

run_aug_plus_lazy_str_shared_no_mem.cpp

gcc62

SUCCESS

run

SUCCESS

valgrind

FAILURE

exit code 1

run_aug_plus_lazy_str_shared_no_mem-valgrind.log

gcc62-asan

SUCCESS

asan

FAILURE

exit code 1

run_aug_plus_lazy_str_shared_no_mem-asan.log

clang-san

SUCCESS

san

SUCCESS

run_aug_plus_lazy_wstr_no_mem.cpp

gcc62

SUCCESS

run

SUCCESS

valgrind

FAILURE

exit code 1

run_aug_plus_lazy_wstr_no_mem-valgrind.log

gcc62-asan

SUCCESS

asan

FAILURE

exit code 1

run_aug_plus_lazy_wstr_no_mem-asan.log

clang-san

SUCCESS

san

SUCCESS

run_aug_plus_wchar_no_mem.cpp

gcc62

SUCCESS

run

SUCCESS

valgrind

FAILURE

exit code 1

run_aug_plus_wchar_no_mem-valgrind.log

gcc62-asan

SUCCESS

asan

FAILURE

exit code 1

run_aug_plus_wchar_no_mem-asan.log

clang-san

SUCCESS

san

SUCCESS

Common header used in some tests: common.h

comment:6 Changed 7 years ago by cpptester

Tested revision 844 by agapova.tatyana.

Main tests

test

stage

result

info

log

run_clear.cpp

gcc62

SUCCESS

run

FAILURE

exit code 139

run_clear-run.log

run_clear_linked.cpp

gcc62

SUCCESS

run

FAILURE

exit code 139

run_clear_linked-run.log

run_clear_no_mem.cpp

gcc62

SUCCESS

run

FAILURE

exit code 139

run_clear_no_mem-run.log

run_clear_wide.cpp

gcc62

SUCCESS

run

FAILURE

exit code 139

run_clear_wide-run.log

run_ctor_c_str_char_traits_no_mem.cpp

gcc62

SUCCESS

run

SUCCESS

valgrind

FAILURE

exit code 1

run_ctor_c_str_char_traits_no_mem-valgrind.log

gcc62-asan

SUCCESS

asan

FAILURE

exit code 1

run_ctor_c_str_char_traits_no_mem-asan.log

clang-san

SUCCESS

san

SUCCESS

run_ctor_c_str_no_mem.cpp

gcc62

SUCCESS

run

SUCCESS

valgrind

FAILURE

exit code 1

run_ctor_c_str_no_mem-valgrind.log

gcc62-asan

SUCCESS

asan

FAILURE

exit code 1

run_ctor_c_str_no_mem-asan.log

clang-san

SUCCESS

san

SUCCESS

run_ctor_c_wstr_no_mem.cpp

gcc62

SUCCESS

run

SUCCESS

valgrind

FAILURE

exit code 1

run_ctor_c_wstr_no_mem-valgrind.log

gcc62-asan

SUCCESS

asan

FAILURE

exit code 1

run_ctor_c_wstr_no_mem-asan.log

clang-san

SUCCESS

san

SUCCESS

run_ctor_no_mem.cpp

gcc62

SUCCESS

run

FAILURE

exit code 139

run_ctor_no_mem-run.log

run_ctor_repeat_char_traits_assign_count.cpp

gcc62

SUCCESS

run

FAILURE

exit code 139

run_ctor_repeat_char_traits_assign_count-run.log

run_ctor_repeat_char_traits_no_mem.cpp

gcc62

SUCCESS

run

SUCCESS

valgrind

FAILURE

exit code 1

run_ctor_repeat_char_traits_no_mem-valgrind.log

gcc62-asan

SUCCESS

asan

FAILURE

exit code 1

run_ctor_repeat_char_traits_no_mem-asan.log

clang-san

SUCCESS

san

SUCCESS

Common header used in some tests: common.h

comment:7 Changed 7 years ago by cpptester

Tested revision 845 by agapova.tatyana.

Main tests

test

stage

result

info

log

run_index_assign_assign.cpp

gcc62

SUCCESS

run

FAILURE

exit code 139

run_index_assign_assign-run.log

Common header used in some tests: common.h

comment:8 Changed 7 years ago by cpptester

Tested revision 846 by agapova.tatyana.

All tests passed. Good job!

comment:9 Changed 7 years ago by agapova.tatyana

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

comment:10 Changed 7 years ago by Vladimir Rutsky

Milestone: ha4-milestone2ha4-deadline
Type: ожидается проверкаожидаются исправления

Замечания:

  1. Для проброса исключения стоит использовать throw;, вместо throw e;:
             } catch (const std::bad_alloc& e) {
                 delete[] new_str;
                 delete new_count;
                 //throw e;
                 throw;
             }

В противном случае может произойти срез типа исключения.

Но: смотрите следующей замечание.

  1. Стоит избегать использования try/catch для обеспечения строгой гарантии безопасности исключений:
             try {
                 new_str = new char_t[m_str->size() + 1];
                 new_count = new size_type(1);
             } catch (const std::bad_alloc& e) {
                 delete[] new_str;
                 delete new_count;
                 throw e;
             }

Скорее всего конкретно этот код будет прекрасно работать, но он сломается, когда, например, кто-то кроме выделения памяти внутри try решит сделать что-то ещё, что может бросить какое-то другое исключение, неstd::bad_alloc.

Можно ловить все исключения (catch (...)), но это довольно неожиданная конструкция.
Гораздо лучше использовать умные указатели, которые уже реализуют RAII.
Например, вы можете вместо:

char_t* m_str;
size_type m_size;
size_type* m_count;

использовать std::shared_ptr<std::vector>:

std::shared_ptr<std::vector<char_t>>

При использовании std::make_shared это будут те же два выделения динамической памяти, что в вашем случае.
Только используйте std::vector так же, как вы сейчас используете сырой буфер --- вы не можете использовать push_back, resize, operator= по умолчанию --- они все копируют символы без использования char traits, что недопустимо.

Альтернативно, вынесите m_str и m_size в отдельную структуру, назовём её storage_t, и храните std::shared_ptr<storage_t> внутри lazy_basic_string.

comment:11 Changed 7 years ago by Vladimir Rutsky

Татьяна, я правильно понимаю, что вы в этом семестре сдаёте только одну задачу?

comment:12 Changed 7 years ago by agapova.tatyana

Здравствуйте!

На самом деле, я ушла из центра. Прошу прощения, что не сообщила об этом явно - я предполагала, что через кураторов эта информация распространится.

comment:13 Changed 7 years ago by Vladimir Rutsky

Resolution: задача НЕ сдана
Status: newclosed

Я понял, успехов!

comment:14 Changed 7 years ago by Vladimir Rutsky

Milestone: ha4-deadline

Milestone ha4-deadline deleted

Note: See TracTickets for help on using tickets.