Dr web код ошибки 1073740940

Ошибка обновления: -1073740940 (Windows 10 1903) - posted in Рабочие станции: Здравструйте. Есть ПК с Windows 10 v1903 и DrWeb Security Space 12, у которого нет (и не будет) подключения к интернету. Обновления для Доктора скачиваются с других ПК с помощью файлов drwupsrv.exe и drwebzones.xml по команде: drwupsrv.exe -c download -r папка -s90 --zones=drwzones.xml --key-file файл ключа Файлы drwupsrv.exe и drwebzones.xml используются всегда самые свежие. На протяжении нескольких лет данная...

#1

Kord

    Newbie

  • Posters
  • 30 Сообщений:

Отправлено 06 Ноябрь 2021 — 15:34

Здравструйте. Есть ПК с Windows 10 v1903 и DrWeb Security Space 12, у которого нет (и не будет) подключения к интернету. Обновления для Доктора скачиваются с других ПК с помощью файлов drwupsrv.exe и drwebzones.xml по команде:
drwupsrv.exe -c download -r «папка» -s90 —zones=drwzones.xml —key-file «файл ключа»

Файлы drwupsrv.exe и drwebzones.xml используются всегда самые свежие.
На протяжении нескольких лет данная схема всегда работала без сбоев, обновлялся с частотой раз в месяц, 2 дня назад сделал крайнее обновление — все хорошо. Сегодня понадобилось с помощью Акрониса восстановить раздел с Windows из образа, сделанного аж в 2019 году. Теперь Доктор образца 2019 года при обновлении выдаёт код ошибки: -1073740940. Если в настройках включить только обновление вирусных баз, то обновление проходит успешно.

Я почти на 100% уверен, что проблему можно решить путем переустановки Доктора из свежего дистрибутива, но хотелось бы понять в чем причина возникновения этой ошибки и как можно обновить старые модули Доктора без переустановки :)

PS: логи с этой машины скинуть весьма проблематично, но если это необходимо — напишите, сделаю

Сообщение было изменено Kord: 06 Ноябрь 2021 — 15:35

  • Наверх


#2


Dmitry_rus

Dmitry_rus

    Guru

  • Helpers
  • 3 305 Сообщений:

Отправлено 06 Ноябрь 2021 — 17:12

Так, в качестве предположений (без логов гадать бессмысленно):

1. Прочекайте файловую систему на предмет ошибок.

2. Не исключено, что структура репозитория со времен 2019 г. несколько изменилась, и апдейтер не совсем корректно с ней работает.

  • Наверх


#3


Kord

Kord

    Newbie

  • Posters
  • 30 Сообщений:

Отправлено 06 Ноябрь 2021 — 17:24

Нашёл у себя в закромах базы от 26.02.2021, попробовал с них обновиться и обновление прошло успешно! Перезагружаю ПК, как того попросил Доктор, пробую обновиться со свежих баз: обновление выполнено успешно!

Для чистоты эксперимента попробовал ещё раз восстановить образ системы 2019 года: все тоже самое — обновление базами 04.11.2021 выдаёт ошибку, обновление базами 26.02.2021 проходит успешно.

Попробовал восстановить образ системы с Windows 7 SP1 (без обновлений) тоже 2019 года, устанавливаю обновление Windows для поддержки SHA256 и Доктор обновляется свежими базами без ошибок:)

  • Наверх


#4


Kord

Kord

    Newbie

  • Posters
  • 30 Сообщений:

Отправлено 06 Ноябрь 2021 — 17:34

Так, в качестве предположений (без логов гадать бессмысленно):
1. Прочекайте файловую систему на предмет ошибок.
2. Не исключено, что структура репозитория со времен 2019 г. несколько изменилась, и апдейтер не совсем корректно с ней работает.

1. Проверил: с файловой системой и самим HDD все в порядке 100%, Акронис использую один и то же уже лет 8, конкретно эта версия не подводила ни разу, да и образ раздела посекторный.
2. Вполне возможно что так, но на Windows 7 Доктор обновляется с новых баз без проблем

Какие именно логи нужны? dwupdater.log или ещё что-то?

  • Наверх


#5


VVS

VVS

    The Master

  • Moderators
  • 18 997 Сообщений:

Отправлено 06 Ноябрь 2021 — 17:40

Какие именно логи нужны? dwupdater.log или ещё что-то?

Для начала именно его.

меня вот что возмутило.  что даже не начинают толком диалог сразу дампы…… © alehas777
———————————
Антивирус это как ремень безопасности — всего лишь увеличивает шансы выжить или получить менее тяжкую травму при аварии.
Есть, однако, категория людей, которые рассматривают средства безопасности как ауру неуязвимости. © basid

  • Наверх


#6


Kord

Kord

    Newbie

  • Posters
  • 30 Сообщений:

Отправлено 06 Ноябрь 2021 — 19:09

Какие именно логи нужны? dwupdater.log или ещё что-то?

Для начала именно его.

Дата: 07.11.2021

1:53 — попытка обновления базами от 04.11.2021 (ошибка)

1:55 — обновление базами от 26.02.2021 (успешно)

Перезагрузка ПК

1:58 —  обновление базами от 04.11.2021 (успешно)

Перезагрузка ПК

Прикрепленные файлы:

  • Прикрепленный файл
     log.rar   47,3К
      3 Скачано раз

  • Наверх


#7


Dmitry_rus

Dmitry_rus

    Guru

  • Helpers
  • 3 305 Сообщений:

Отправлено 06 Ноябрь 2021 — 19:51

При обновлении в 1:53:07 старый апдейтер падает на полпути, затем перезапускается и начинает 2-ю фазу (постапдейт), не завершив собственно апдейт. Возможно, дебажные логи апдейтера смогут как-то пролить свет.

20211107 01:53:07 [INF] [ Loader ] Download file versions.xml from C:DrWeb-UpdatesUpdatesversions.xml to C:ProgramDataDoctor WebUpdaterrepoversions.xml.newer
20211107 01:53:07 [INF] [ Loader ] Timestamp zone is 20211103183753
20211107 01:53:07 [INF] [ Loader ] Zone C:DrWeb-UpdatesUpdates has valid timestamp for update
20211107 01:53:07 [INF] [ Loader ] Download file certificate.xml from C:DrWeb-UpdatesUpdatescertificate.xml to C:ProgramDataDoctor WebUpdaterrepocertificate.xml.newer
20211107 01:53:07 [INF] [ Loader ] Download file 90products.xml from C:DrWeb-UpdatesUpdates90products.xml to C:ProgramDataDoctor WebUpdaterrepo90products.xml.newer
Updater version: 12.0.12.08020, x64, Time : 07 November 2021  01:53:07
Computer name  : PC, User name : WORKGROUPPC$
Platform       : Microsoft Windows 10 Professional  18362, x64, Locale : 1049
Command line   :  -c postupdate --progress-to-console --verbosity=info --dws9 --interactive --host-guid=a5564af6-5497-4ec3-9d2e-a8439d75ddc2 --coutname=7C49CEAF1D257329
Copyright (c) Doctor Web, Ltd., 1992-2019
=============================================================================
20211107 01:53:07 [INF] [  Main  ] Logfile: C:ProgramDataDoctor WebLogsdwupdater.log
20211107 01:53:07 [INF] [  Main  ] Updater Run as interactive application [ PID: 5724 ]

  • Наверх


#8


Kord

Kord

    Newbie

  • Posters
  • 30 Сообщений:

Отправлено 06 Ноябрь 2021 — 20:07

При обновлении в 1:53:07 старый апдейтер падает на полпути, затем перезапускается и начинает 2-ю фазу (постапдейт), не завершив собственно апдейт. Возможно, дебажные логи апдейтера смогут как-то пролить свет.

Dmitry_rus, спасибо, что посмотрели.
В принципе для себя я нашёл выход из ситуации (сначала обновиться февральскими базами, затем — актуальными). Думаю, разработчикам будет не особо интересно тратить время на выяснение причин падения Updater’a двухлетней свежести на устаревшей ОС. Но если что, могу собрать дебажные логи :)

  • Наверх


#9


Afalin

Afalin

    Guru

  • Dr.Web Staff
  • 5 519 Сообщений:

Отправлено 07 Ноябрь 2021 — 12:44

Если там падение с heap corruption на этом products.xml, то совсем не интересно.

Семь раз отрежь – один раз проверь

  • Наверх


#10


SergSG

SergSG

    The Master

  • Posters
  • 14 381 Сообщений:

Отправлено 10 Ноябрь 2021 — 15:59

STATUS_FAILED_STACK_SWITCH

Структура зона-репы менялась и старый апдейтер об этом не в курсе.

  • Наверх


#11


Kord

Kord

    Newbie

  • Posters
  • 30 Сообщений:

Отправлено 10 Ноябрь 2021 — 21:52

STATUS_FAILED_STACK_SWITCH
Структура зона-репы менялась и старый апдейтер об этом не в курсе.

Тогда, по идее, апдейтер должен падать на любой ОС, но на Windows 7 проблем нет…

  • Наверх


#12


SergSG

SergSG

    The Master

  • Posters
  • 14 381 Сообщений:

Отправлено 10 Ноябрь 2021 — 22:54

STATUS_FAILED_STACK_SWITCH
Структура зона-репы менялась и старый апдейтер об этом не в курсе.

Тогда, по идее, апдейтер должен падать на любой ОС, но на Windows 7 проблем нет…

Это код системной ошибки — винда подавилась апдейтером. И падать, по идее, может на любой ОС, но могут быть и свои нюансы.

  • Наверх


#13


Afalin

Afalin

    Guru

  • Dr.Web Staff
  • 5 519 Сообщений:

Отправлено 11 Ноябрь 2021 — 09:49

В зависимости от положения звёзд оно может и не упасть.

Семь раз отрежь – один раз проверь

  • Наверх


#14


shonyv

shonyv

    Newbie

  • Posters
  • 81 Сообщений:

Отправлено 17 Ноябрь 2021 — 09:12

Сегодня не хочет доктор обновляться, все по инструкции сделал и ноль результата! А вот в панели управления не восстанавливается пишет ошибка 46

88c290627a83.gif В камень стрелять, стрелы терять!

  • Наверх


#15


VVS

VVS

    The Master

  • Moderators
  • 18 997 Сообщений:

Отправлено 17 Ноябрь 2021 — 09:24

Сегодня не хочет доктор обновляться, все по инструкции сделал и ноль результата! А вот в панели управления не восстанавливается пишет ошибка 46

Создайте новую тему, в которую сразу же приложите отчёт доктора.
Тема закрыта.
Модератор.

меня вот что возмутило.  что даже не начинают толком диалог сразу дампы…… © alehas777
———————————
Антивирус это как ремень безопасности — всего лишь увеличивает шансы выжить или получить менее тяжкую травму при аварии.
Есть, однако, категория людей, которые рассматривают средства безопасности как ауру неуязвимости. © basid

  • Наверх


Содержание

  1. Что делать, если Dr.Web не обновляется
  2. Почему не обновляется Dr.Web
  3. Способы решения проблемы
  4. Восстановление или перезагрузка программы
  5. Обновление вручную
  6. Устранение ошибок диска
  7. Обращение в техподдержку
  8. Коды ошибок Dr.Web
  9. Ошибка 2
  10. Ошибка 9
  11. Ошибка 10
  12. Ошибка 11
  13. Ошибка 12
  14. Ошибка 16
  15. Ошибка 32
  16. Ошибка 33
  17. Ошибка 110
  18. Ошибка 902
  19. Ошибка 914
  20. Ошибка 1066
  21. Ошибка 1722
  22. Ошибка 1726
  23. Ошибка 12002
  24. Ошибка 12007
  25. Ошибка 12029
  26. Ошибка 12152

Что делать, если Dr.Web не обновляется

Антивирус – это обязательная программа для всех компьютеров, с целью безопасной работы. Однако, для максимальной защиты, антивирус должен каждый день обновляться, а то и несколько раз на день, чтобы подгружать новые данные о вирусах и не упустить из виду новую угрозу. Функция автоматического обновления вирусных баз включена в каждый антивирус и Dr.Web не является тому исключением. Но что делать, если по каким-то причинам у вас перестал обновляться Доктор Веб? Можно ли самостоятельно устранить ошибку и наладить работу антивируса для защиты своего компьютера?

Почему не обновляется Dr.Web

Самой популярной причиной, почему антивирус не обновляется – это отсутствие интернет-соединения. Ведь вирусные базы берутся из сервера компании при помощи подключения к интернету. Еще одной причиной приостановки обновления антивируса является срок окончания лицензии программы. Но если вы точно уверены, что Dr.Веб исправно работал, лицензия не просрочена, вы самостоятельно не отключали обновление и компьютер подключен к интернету, то в чем же может быть проблема? Антивирус в результате системного сбоя может прекратить обновляться в привычном режиме, если произошло нарушение в скриптах, часть их повреждена и как результат – ошибка репозитория. Поэтому исправлять подобный сбой придется вручную.

Способы решения проблемы

Если вы столкнулись с ошибкой репозитория или другими словами ошибка 10, которая отвечает за обновление антивируса, то не стоит впадать в панику, реанимировать Доктор Веб вы сможете самостоятельно. Для этого ознакомьтесь с каждым из способов и выберите для себя оптимальный.

Восстановление или перезагрузка программы

Простым, но иногда действенным способом является перезапуск программы. Для этого нажмите на значок антивирус в правом нижнем углу панели и среди доступных функций, выберите выход. Теперь запустите утилиту и попробуйте нажать «Обновление». Если такой метод не сработал, тогда возьмемся за восстановление Доктора Web при помощи стандартных инструментов Windows:

  1. Нажимаете на кнопку «Пуск».
  2. Справа выбираете «Панель управления» или «Параметры» (далее «Система»), в зависимости от версии системы.
  3. В меню системы выбираете раздел «Программы» или «Установка и удаление программ».
  4. Переходите в него, после чего на экране появляется список всех приложений на компьютере.
  5. Выбираете «Dr.Web» и вверху нажимаете «Изменить», а после «Восстановить».
  6. На экране запустится процесс сканирования файлов программы.

Когда процесс восстановления антивируса завершится, обязательно перезагрузите компьютер и проверьте исправность обновления.

Обновление вручную

Если первый способ вам не помог, а вы хотите здесь и сейчас произвести обновление Dr.Веба, то в программе доступна функция ручного обновления. Что она подразумевает? Вам необходимо самостоятельно сохранить в отдельную папку на компьютере последнюю версию обновлений вирусных баз, а после в настройках антивируса указать место, откуда необходимо подтянуть обновление. Делается это следующим образом:

  1. Запустите Доктор Web.
  2. В левом нижнем углу интерфейса программы нажмите на замочек, чтобы он открылся, после справа выбираете «Настройки» (значок шестеренки).
  3. Переходите в раздел «Основные», а потом выбираете раздел «Обновление».
  4. В пункте «Источник обновлений» нужно внизу нажать на кнопку «Изменить» и выбрать следующий тип «Локальная или сетевая папка».
  5. Далее нажимаете «Обзор» и указываете папку на компьютере, где вы сохранили пакет последней вирусной базы.
  6. Нажимаете «Ок» и запускаете обновление.

При реализации такого метода обязательно выключите интернет, чтобы программа не пыталась каждую секунду связаться с сервером для автоматического обновления. Однако вы должны понимать, что такой способ поможет решить проблему с обновлением Доктора Web в одноразовом порядке, то есть, чтобы поддерживать актуальную версию антивирусных баз, вам нужно каждый раз скачивать новый пакет и помещать его в папку, откуда антивирус подтягивает обновления. Поэтому для надежной защиты компьютера нужно исправить эту проблему и вернуть автоматическое обновление Dr.Web.

Устранение ошибок диска

Теперь переходим к более сложному способу исправления ошибки обновления, однако, по отзывам многих пользователей, именно он оказался наиболее эффективным. Итак, что здесь нужно сделать? Если антивирус Доктор Web перестал обновляться без видимых на то причин, то возможно, что в момент системного сбоя повредились файлы на Локальном диске. Переходим к решению проблемы:

  1. Сначала запускаем проверку исправности жесткого диска. Открываете меню компьютера, на «Локальный диск C» ставите мышкой и переходите в «Свойства» при помощи правой кнопки.
  2. Далее выбираете «Сервис», а после «Проверить».
  3. Ждете окончания сканирования.

Если в результатах проверки система требует исправить неполадки, то переходим к действиям. В первую очередь нам нужно отключить в антивирусе такие компоненты, как «Самозащита» и «Превентивная защита», так как именно эти модули отвечают за внесение изменений в программу, а после перенастроить программу:

  1. Сначала отключите интернет.
  2. Справа на панели нажмите на иконку «Web».
  3. Открываете доступ к изменению настроек – нажимаете на замочек в левом нижнем углу, чтобы он открылся.
  4. Переходите в раздел «Компоненты защиты».
  5. Напротив пункта «Превентивная защита», переводим ползунок в неактивное положение.
  6. Теперь возвращаемся в меню настроек и выбираем раздел «Основные», и таким же образом деактивируем модуль «Самозащита».
  7. Далее повторяем шаги из первого способа по восстановлению программы, через меню «Пуск», «Установка и удаление программ» или «Система», в зависимости от платформы.
  8. Перезагружаете компьютер и проверяете на исправность – начинается автоматического обновление Доктора Web или нет.

Если данный способ помог исправить проблему, то обязательно верните прежние настройки антивирусу – включите «превентивную защиту» и модуль «Самозащита».

А если результат проверки не выявил отклонений в жестком диске или восстановление программы не помогло, то остается только одни вариант – переустановить антивирус Доктор Web. Для переустановки необходимо полностью удалить программу и заново ее установить. Чтобы после удаления утилиты не возникло проблем, и не сохранились остаточные файлы, необходимо дополнительно реестр. Если вы не знаете, как это делать, то просто воспользуйтесь специальными очищающими утилитами, например, CCleaner или Master Clean, которые не только почистят компьютер от мусора, но помогают правильно провести процесс деинсталляции. Также для этих целей существует специально разработанная программа от компании Dr.Веб – Web Remover.

Обращение в техподдержку

Ну и последний вариант, который спасает при неэффективности всех предыдущих, это обращение в техподдержку сервиса Dr.Web. Специалисты технической службы помогут разобраться с вашей проблемой и предложат ее устранение. Однако процесс обращения в техподдержку заточен в виде отправки специального отчета, а не как это обычно бывает в виде написания обращения. То есть, вам нужно воспользоваться приложением DwSysInfo, где формируется отчет об ошибке работы антивируса и отсылается в компанию. После рассмотрения с вами связывается сотрудник сервиса и устраняет проблему. Преимущества обращения в техподдержку является и то, что специалист может получить дистанционный доступ к вашему компьютеру и «напрямую» настроить автоматическое обновление.

Источник

Коды ошибок Dr.Web

Dr.Web считается российским разработчиком антивирусных программ, сервисов для предоставления информационных услуг корпоративным, частным пользователям. Кроме того, “Доктор Веб” – популярная антивирусная программа, установка которой нередко сопряжена с неполадками. Ниже представлены популярные коды ошибок Dr.Web и их расшифровка.

Ошибка 2

Ошибка dr web 2 свидетельствует о сбое в процессе обновления. Она вызывается несколькими причинами. Чтобы ее исправить, необходимо проверить доступность сети, правильность настроек прокси при их использовании. Если сеть доступна, прокси настроен правильно, необходимо выполнить ряд действий, направленных на восстановление системы с антивирусом. Возможно, проблема исчезнет.

Устранить проблему можно тремя путями:

  1. Произвести проверку жесткого диска, используя утилиту chkdsk. Чтобы проверить диск, необходимо ввести команду chkdsk C: /F /R в поисковике Виндовс, зажав клавиши Виндовс+R. Утилита предложит проверить диск после перезагрузки. С действием нужно согласиться. При загрузке появится сообщение о проверке диска, которую можно отменить, нажав любую клавишу. После проверки диска, следует перегрузить систему и протестировать его.
  2. Выполнить восстановление антивирусника. Для этого нужно открыть Пуск, перейти в Панель Управления, Программы и компоненты. Далее нажать Изменить и Восстановить программу. После восстановления системы перегрузить ОС и проверить, как работает антивирусник.
  3. При сохранении неполадки в обновлении, следует нажать на антивирусный значок справа внизу, потом зайти в Центр безопасности. Там найти значок замок, потом шестеренку. В разделе Общие нажать на Дополнительные настройки, Журнал, Изменить. У флажка с обновлением антивирусника кликнуть на флажок и сохранить настройки. Далее нужно повторить попытку обновления. После появления кода 2 сформировать отчет, выбрав Поддержку, Создать отчет. Далее обратиться в службу поддержки.

Ошибка 9

Проблема состоит в невозможности подключения к серверам обновления. Ошибку можно решить двумя способами. В первом случае в антивирусных настройках не написаны параметры серверного прокси или имеются проблемы, связанные с интернет подключением. При применении прокси необходимо:

  1. Щелкнуть по значку программы справа внизу правой кнопкой мыши;
  2. Перейти в режим администратора, щелкнуть по замку, далее – по шестеренке;
  3. Выбрать раздел Сеть, далее кликнуть на параметр использования прокси-сервера, корректно настроить соединение сети.

Важно! Если прокси не применяется, следует проверить сетевое соединение и при необходимости настроить его.

Во втором случае код появляется, когда на серверах обновлений нет, однако части серверов обновления нет. Поскольку код 9 говорит об отсутствии свежих обновлений, то никаких действий предпринимать не стоит. Антивирус в назначенный час будет автоматически обновлен.

Ошибка 10

Суть проблемы состоит в репозиторие, сбое в скриптах, отсутствии некоторых из них. Решать проблему необходимо, переустановив антивирус. Для решения вопроса, следует скачать с официального сайта антивирусную программу. Удалить предыдущую версию программы, сделать перезагрузку компьютера, далее запустить антивирус и при установке указать путь к файлу. Сделать повторную перезагрузку компьютера.

Ошибка 11

Проблема заключается в невозможности обновления антивирусных компонентов. Код 11 высвечивается по ряду причин. Нередко его появление связано с использованием устаревшей антивирусной версии или с повреждением файлов. Если используется устаревшая версия антивируса, необходимо удалить старую и закачать новую программу.

Если файлы повреждены вследствие проблем с диском, следует исправить все ошибки диска, восстановить антивирусную систему. Восстановление можно провести через следующую пошаговую инструкцию: Пуск, Панель управления, Программы и компоненты, Dr.Web, Изменить, Восстановить. После восстановления, потребуется перезагрузить персональный компьютер, проверить, как работают обновления.

Ошибка 12

Суть вопроса в блокировке лицензии. Зачастую она возникает при отсутствии ее активации, активации старой, лицензированной версией, использовании лицензии на другом персональном компьютере. Если не активирована лицензия, необходимо активировать ее через менеджер лицензий. Достаточно удалить заблокированную лицензию и оставить одну действующую.

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

Ошибка 16

По этой ошибке установить и работать с антивирусом невозможно из-за действия сторонних программ. Есть несколько основных причин, почему возникает неполадка. В системе могут находиться другие антивирусы или частично установленные файлы. Также в системе могут находиться вредоносные ПО, блокирующие установку антивирусной программы. Необходимо использовать бесплатную утилиту, чтобы очистить персональный компьютер от вирусов, после чего повторить установку.

Ошибка 32

32 ошибка Доктор Веб заключается в неполадке установке или восстановлении антивирусной программы. Она появляется, если есть критические повреждения в момент невозможности установки, восстановления продукта по каким-то причинам. Следует загрузить, установить утилиту, после чего перезагрузить персональный компьютер, повторно установить программу.

Ошибка 33

Сбой под кодом 33 связан с работой базы данных, невозможности совершения обновления программы из-за повреждения программного обеспечения сервера. В такой ситуации необходимо обратиться в службу поддержки, возможно, базу данных удастся восстановить инженерам.

Ошибка 110

110 неполадка связана с неполадкой установки серверных продуктов. Она вызывается разными причинами, поэтому необходимо обратиться в техническую поддержку, приложить отчет, который создан с помощью утилита.

Ошибка 902

Суть неполадки состоит в неправильной установке, удалении. Она возникает, если повреждаются антивирусные файлы, не полностью или некорректно был удален старый антивирус.

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

Ошибка 914

Коды ошибок Доктор Веб 914 и 910 говорят о том, что произошел сбой компонентов продукта. В такой ситуации необходимо переустановить антивирус.

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

Ошибка 1066

Неполадка связана с невозможностью установки антивируса, если есть несовместимое программное обеспечение с утилитой. Зачастую проблема возникает с агента Доктора Веб, если на ПК уже установлен другой антивирусник. Необходимо выполнить его удаление, а позднее – повтор попытки установки Доктора Веб.

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

Ошибка 1722

Ошибка связана с установкой, работой антивирусника, проблемой с его сканированием. В такой ситуации следует отправить отчет о неисправной работе программы в техническую поддержку.

Ошибка 1726

Ошибка связана с некорректным запуском программы. Причинами служат основные четыре пункта. Неполадка связана с поврежденной загрузкой или неполной установкой программного обеспечения, повреждением реестра Доктор Веб из-за установки или удаления утилиты.

Может появляться из-за наличия в системы вируса, вредоносного программного обеспечения, повреждения файла Виндовс или удаления файлов утилиты другой программой.

Ошибка может быть связана с другими факторами, поэтому при совершении всех действий, направленных на решение возникшей проблемы, следует обратиться в техническую поддержку.

Что можно сделать? Специалисты рекомендуют в такой ситуации восстановить записи реестра, полностью просканировать компьютер на вирусы, очистить ПО от временных файлов, папок и другого мусора. Они советуют также обновить драйверы компьютера, использовать Восстановление Виндовс системы для отмены последних изменений в ПО, переустановить программу заново, запустить проверку системных Виндовс файлов, установить доступные Виндовс обновления и произвести чистую установку Виндовс.

Ошибка 12002

Суть заключается в неполадке с сетью, неправильной настройке сетевых соединений, неверно выбранных параметров серверного прокси, особенностью настройки сетевого подключения. Специалисты рекомендуют по этой проблеме проверить доступность интернет-сети, настройку брандмауэра, серверного прокси.

Если раньше не было выполнено этого действия, следует зарегистрировать лицензию, получить ключевой файл. Потом активировать полученный на майл ключевой файл, используя лицензионный менеджер. В случае отсутствия понимания, как убрать код 12002 с компьютера, программисты советуют составлять письмо в техническую поддержку. Желательно при этом прикреплять отчет с выполненными ранее действиями.

Ошибка 12007

Неполадка возникает из-за отсутствия доступа к сети, неправильной настройки сетевых соединений, неверных параметров серверного прокси, особенности настройки сетевого подключения на рабочем месте. При возникновении подобной ошибки необходимо проверить доступность интернет-сети, настроек брандмауэра, серверного прокси.

Важно! Если перечисленные выше действия были проделаны, а неполадка не исправлена, специалисты рекомендуют обратиться в службу технической поддержки. Для того чтобы сотрудники смогли оперативно помочь в ситуации, инженеры рекомендуют заранее делать подробный отчет о проделанных ранее действиях для устранения появляющегося кода при запуске утилиты.

Ошибка 12029

Ошибка связана с сетевыми неполадками, неправильной настройкой сетевых соединений, неверными параметрами серверного прокси. Нередко она сопряжена с тем, что пользователю не удается настроить сетевое подключение на рабочем столе. Также часто она связана с ошибкой в модуле обновления. Специалисты рекомендуют в таком случае действовать двумя путями:

  • Проверить доступность интернет – соединения, брандмауэрных настроек и серверного прокси;
  • Написать в службу технической поддержки для выяснения обстоятельств невозможности корректной работы антивирусника.

При сохранении ошибки, инженеры рекомендуют сделать переустановку антивируса. В таком случае следует скачать с сайта актуальный антивирусный дистрибутив. Потом удалить Доктор Веб предыдущей версии, используя “Панель управления”, “Установку и удаление программ”. Затем перезагрузить компьютер, скачать, запустить утилиту, перезагрузить компьютер, запустить антивирус и еще раз сделать перезагрузку операционной системы устройства.

Важно! Если после переустановки ошибка продолжит появляться, следует сделать отчет через DwSysInfo и отправить его специалистам службы техподдержки.

Ошибка 12152

Ошибка связи с сервером обозначается кодом 12152. При ее появлении специалисты рекомендуют проверить интернет – соединение, очистить компьютер от вредоносных ПО, почистить ПО от ненужных файлов, сделать переустановку антивирусника, перезагрузить компьютер или написать в службу технической поддержки, прикрепив отчет о проведенных действиях для устранения неполадки. Сотрудники Доктор Веб отвечают быстро и, в основном, помогают решить возникшую сложность быстро.

В результате, для решения основных проблем, связанных с некорректной работой антивируса Доктор Веб, следует связаться со специалистами службы технической поддержки, сформировав отчет через представленную выше программу. Прежде рекомендуется посмотреть работоспособность сети, проверить ПО на вирусы, ненужные папки и попробовать переустановить антивирус заново.

Источник


Большое спасибо заранее за надежные полезные мысли …. Кажется, у этого есть что-то. Теперь я понимаю, что проблема, вероятно, только незначительно связана с установкой с установщиком.


Алло,

Я уверен, что это не новичок, а идея? Независимо от того, что я делаю вместо этого, он принял скорость combi после длительного перезапуска x, все без успеха. Как вы думаете, на стороне производителя … при необходимости в режиме совместимости Lasco

Поэтому он, вероятно, имеет какое-то отношение к сканеру, потому что ошибка произошла, когда я хотел обновить Outlook.

Проблема в том, что я установщик, но что? Твен и драйвер WIA я не могу выдержать, несмотря на то, что сейчас почти 40 часов. Приветствие — больше не доступны. Кто-нибудь должен установить, если не предлагается драйвер Windows 10!

14393, калькулятор представляет собой ноутбук Satellite C 70 A. Система WIN 10 stand 1607 / test только после ручного ввода USB-порта, сканера нет. Пробовал компьютер определяет, что 100 больше не может устанавливать сканер. Все попытки с помощью антивирусного сканера и Malwarebytes проверяются без находок.

У меня есть некоторые подсказки для других инструментов обслуживания пользователей и т. Д.

Ошибки, связанные с лицензией

Ошибка 0

Невозможно зарегистрировать лицензию через Мастер регистрации с помощью лицензионного кода, нужен ключевой файл. Проблема актуальна для ПК под управлением Windows XP.

Решение:

Из-за ограничений Windows XP активация лицензии непосредственно через Мастер регистрации антивируса в настоящее время невозможна. Пройдите по ссылке Регистрация серийного номера, зарегистрируйте лицензию и подтвердите отправку ключевого файла на ваш электронный адрес. После регистрации на указанный вами при первой регистрации адрес придет электронное письмо с ключевым файлом, который и нужно будет указать в Мастере регистрации антивируса.

Если у вас еще не установлен Dr.Web версии 11.5, настоятельно рекомендуем скачать с нашего сайта ее дистрибутив и установить в системе вместо устаревшей версии.

Операционная система Windows XP катастрофически устарела. В ней имеются незакрытые уязвимости, через которые легко могут проникать новые вредоносные программы, еще не попавшие в базы антивирусов. Компания Microsoft с апреля 2014 года полностью прекратила поддержку Windows XP. Это означает, что для данной системы практически полностью прекращен выпуск обновлений, исправляющих обнаруживаемые в системе уязвимости, так что обеспечить надежную защиту этой ОС сегодня практически невозможно.

Для работы в интернете (особенно если на компьютере ведется работа с банковскими или платежными системами) настоятельно рекомендуем использовать компьютеры с более современными и более безопасными версиями Windows или перевести работу с интернетом и платежными системами на ПК под управлением Linux или macOS. Если же по какой-то причине необходимо использование именно Windows XP, нужно обязательно установить в системе все выпущенные для нее обновления, а также соответствующими техническими средствами ограничить доступ с этого компьютера в интернет только необходимыми для работы сайтами.

Ошибки 2, 5, 9, 13, 22, 38, 62, 71, 90, 125, 999-1018, 1900

Ошибка при взаимодействии с сервисом.

Решение:

Попробуйте повторить попытку позже или обратитесь в службу технической поддержки, приложив к запросу отчет утилиты DwSysInfo.

Как создать отчет SysInfo?

Ошибка 12

Лицензия заблокирована.

Чаще всего ошибка возникает по следующим причинам:

  1. Лицензия не активирована.

    Решение:

    Активируйте новую лицензию в Менеджере лицензий Dr.Web и удалите из него истекшую (или заблокированную) лицензию. В списке лицензий должна остаться только одна, действующая лицензия.

  2. После переустановки антивируса он активируется старой, уже продленной лицензией.

    Решение:

    Если вы приобрели продление лицензии, то она автоматически блокируется, а оставшийся срок ее действия прибавляется к сроку действия новой лицензии. То есть при попытке активировать антивирус старой лицензией возникает ошибка. Укажите новую лицензию при регистрации антивируса или укажите новую лицензию в качестве основной в Менеджере лицензий.

  3. Лицензия была использована ранее на другом ПК. Такое случается, когда по ошибке было приобретено продление на 1 ПК на 2 года при необходимости защитить 2 ПК.

    Решение:

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

    Внимание! После разделения лицензии (2 года /1 ПК) она будет заблокирована, а взамен вы получите две новых лицензии (2 ПК / 1 год).

Ошибка 13

В Менеджере лицензий Dr.Web нет ни одной действующей лицензии.

Решение:

Зарегистрируйте новую лицензию в Менеджере лицензий Dr.Web.

Ошибка 105

С ошибкой могут столкнуться пользователи демолицензий. Cистемный хэш не совпадает с системным хэшем, с которым проводилась первичная активация (попытка использовать серийный номер демо на еще одном компьютере или после смены ОС).

Две основных причины:

  1. Демонстрационный период, соответствующий указанному серийному номеру, уже активирован на другом компьютере. Использование демоключа на двух ПК является нарушением условий использования демо.

    Решение:

    • Если другому вашему компьютеру нужна защита Dr.Web, запросите демо с него.
    • Если на таком компьютере вы уже использовали право на одно демо в течение одного года, чтобы ваш компьютер не оставался без защиты Dr.Web, рекомендуем приобрести лицензию Dr.Web.
  2. Обновление ОС Windows. При этом ошибка чаще всего возникает на Windows 10 после установки очередного крупного обновления.

    Решение:

    Нужно заново оформить демонстрационный серийный номер на нашем сайте и активировать его.

    Особенно часто ошибка возникает на Windows 10, так как к ней часто выходят обновления, меняющие номер версии, отчего антивирус перестает «узнавать» систему, но хэш ПК сохраняется, и повторно зарегистрировать лицензию нельзя.

Ошибка 400

Превышено количество попыток активации серийного номера.

Решение:

Активируйте серийный номер с помощью ключевого файла или отправьте письменную заявку в службу технической поддержки.

Ошибка 401

В качестве основания для продления указана уже продленная лицензия.

Решение:

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

Для коробочных продуктов с двумя лицензиями:

Вторая лицензия в этом случае должна регистрироваться как новая, без бонуса за продление.

Ошибка 402

В качестве основания для продления указана заблокированная лицензия.

Решение:

Отправьте письменную заявку в службу технической поддержки.

Ошибка 404

Ошибка при вводе серийного номера. Её можно увидеть как в Менеджере лицензий, так и на официальном сайте.

Решение:

Проверьте правильность ввода серийного номера и соответствующего ему регистрационного e-mail. Попробуйте повторить попытку ввода чуть позже.

При необходимости отправьте письменную заявку в службу технической поддержки.

Ошибка 405

Неверный метод запроса.

Решение:

Отправьте письменную заявку в службу технической поддержки.

Ошибка 406

При продлении: предоставленные данные не совпадают с продлеваемым продуктом.

Решение:

Убедитесь в правильности введенного адреса e-mail (опечатки, ошибки в домене почты и т. д.). При необходимости отправьте письменную заявку в службу технической поддержки.

Ошибка 410

В качестве основания для продления была указана ещё не зарегистрированная лицензия.

Решение:

Зарегистрируйте лицензию, которую планируете продлевать.

a

Ошибка 415

В качестве основания для продления была указана ранее продлённая лицензия.

Решение:

Продлить лицензию можно только один раз. При следующем продлении указывать следует ту актуальную лицензию, с помощью которой продлевали предыдущую.

Ошибка 452

Невозможно обновить вирусные базы на Агентах при использовании Dr.Web Enterprise Security Suite. Проявляется после обновления лицензии — старая блокируется, а оставшееся время добавляется к новой лицензии. Но если новая лицензия не была распространена на станции, то Агенты на них не будут обновляться.

Решение:

Распространить действие новой лицензии на все станции Антивирусной сети.

Ошибки 500 — 501

Внутренняя ошибка сервера.

Решение:

Отправьте письменную заявку в службу технической поддержки.

Ошибка 592

Для демоверсий: с момента получения предыдущего демо прошло менее года.

Решение:

Чтобы ваш компьютер не оставался без защиты Dr.Web, рекомендуем приобрести лицензию Dr.Web.

Ошибка 607, 614

Ключ-приложение как основание для продления или получения демо неверен.

Решение:

Отправьте письменную заявку в службу технической поддержки.

Ошибка 615

В качестве основания для продления указана заблокированная лицензия.

Решение:

Отправьте письменную заявку в службу технической поддержки.

Ошибка 616

Серийный номер не соответствует продукту. Возникает, например, при попытке продлить лицензию на Антивирус Dr.Web для Linux с указанием ключевого файла от Dr.Web Mobile Security.

Решение:

Зарегистрируйте серийный номер через наш сайт, после чего на указанный e-mail будет отправлен лицензионный ключевой файл (drweb32.zip).

После этого можете повторить попытку активации, выбрав для неё использование ключевого файла.

Подробнее об активации с помощью ключевого файла можно прочитать в документации.

Ошибка 617, 618

В качестве основания для продления использована лицензия сроком менее 3 месяцев.

Решение:

Продлеваемая лицензия должна иметь период действия более 3 месяцев.

Ошибка 619

Число объектов продлеваемой лицензии не совпадает с числом объектов новой лицензии.

Решение:

Для продукта Dr.Web Enterprise Security Suite лицензия продления со скидкой предоставляется на число защищаемых объектов, не превышающее число защищаемых объектов, указанное в прежней (продлеваемой) лицензии. С общими условиями продления со скидкой можно ознакомиться по ссылке.

Ошибка 620

Ключ-приложение как основание для продления или получения демо неверен.

Решение:

Отправьте письменную заявку в службу технической поддержки.

Ошибка 621

Неверно введен серийный номер.

Решение:

Обратите внимание, что серийный номер необходимо вводить, используя заглавные буквы и знак «-» для разделения полей ключа.

Ошибка 623

Недопустимый адрес e-mail.

Решение:

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

Ошибка 625

Два возможных варианта:

  1. Непредвиденная ошибка взаимодействия с лицензионным сервером.

    Решение:

    Отправьте письменную заявку в службу технической поддержки.

  2. В качестве основания для продления указана уже продленная лицензия.

    Решение:

    Продлить лицензию можно только один раз. При следующем продлении указывать следует ту актуальную лицензию, с помощью которой продлевали предыдущую.

Ошибка 626

Прикладываемая (в качестве основания для продления / получения бонуса) лицензия несовместима с продлеваемым продуктом.

Решение:

Отправьте письменную заявку в службу технической поддержки.

Ошибка 1403

Ошибка возникает в процессе приобретения продления, если в качестве основания указан номер уже продленной лицензии.

Решение:

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

Ошибка 1404

Возникает после переустановки операционной системы / антивируса и повторной попытки регистрации серийного номера, если используемый до переустановки серийный номер был продлен. После продления старый серийный номер блокируется, и его больше нельзя использовать для активации программы, но оставшийся срок его действия добавляется к сроку новой лицензии.

Решение:

Чтобы активировать Dr.Web, используйте новый серийный номер, который вы получили после оплаты продления.

Если вы не можете найти свой серийный номер, воспользуйтесь сервисом его восстановления.

Ошибка 1405

Срок действия ключевого файла по указанному серийному номеру истек.

Решение:

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

Ошибки >12000

Ошибки Microsoft Windows HTTP (WinHTTP). Возможно, неполадки с сетью, неправильная настройка сетевых соединений, неверные параметры прокси сервера.

Решение:

Для подробной диагностики обратитесь в службу технической поддержки, приложив к запросу отчет утилиты DwSysInfo.

Как создать отчет SysInfo?

Коды и описание ошибок для продуктов Dr.Web под Windows

Ошибки при установке

Семейство продуктов для Windows (Dr.Web Home Security Suite / Dr.Web Security Space), KATANA

Ошибка 1

Ошибка активации серийного номера через приложение.

Решение:

Попробуйте использовать ключевой файл вместо серийного номера.

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

Если ошибка сохраняется, обратитесь в службу технической поддержки, приложив к запросу отчет утилиты DwSysInfo.

Как создать отчет SysInfo?

Ошибка 11

Не получилось отключить режим самозащиты.

Решение:

Убедитесь, что используется релизная версия инсталлятора (один из способов получить релизную версию — через Мастер скачиваний).

Если ошибка сохраняется, проведите проверку жесткого диска на наличие ошибок с помощью утилиты chkdsk:

  1. Вызовите командную строку от имени администратора. Для этого откройте Пуск → Все программы — Стандартные, нажмите правой кнопкой мыши на Командную строку. В открывшемся меню выберите Запуск от имени администратора.
  2. Для проверки диска C:/ выполните следующую команду:
    chkdsk C: /F /R
    Утилита предложит осуществить проверку диска C:/ при следующей загрузке компьютера. Согласитесь и перезагрузите компьютер. При загрузке начнется проверка диска. Отменять ее не нужно, необходимо дождаться окончания проверки.

Если ошибка сохраняется, обратитесь в службу технической поддержки, приложив к запросу отчет утилиты DwSysInfo.

Как создать отчет SysInfo?

Ошибка 13

Не получилось включить режим самозащиты.

Решение:

Обратитесь в службу технической поддержки, приложив к запросу отчет утилиты DwSysInfo.

Как создать отчет SysInfo?

Ошибка 16

Установка и работа антивируса невозможна.

Одна из вероятных причин — установке и работе антивируса препятствуют сторонние программы, наличие в системе других антивирусов или их следов после неудачной попытки удаления, вирусная активность.

Решение:

  1. Если в системе есть папка C:ProgramDataDoctor Web, удалите ее.
    (Как включить отображение скрытых и системных файлов?)

    1. Откройте поисковую строку Windows через меню Пуск или сочетанием клавиш Win+S.
    2. Введите в поисковой строке «Параметры папок» и откройте этот раздел.
    3. Откройте вкладку Вид. В разделе Дополнительные параметры установите флажок Показывать скрытые файлы, папки и диски, снимите флажок Скрывать защищенные системные файлы, затем нажмите ОК.
  2. Проверьте наличие других установленных антивирусов в системе. Сторонний антивирус следует удалить штатными средствами Windows или соответствующей утилитой удаления. Если удаление завершается ошибкой, обратитесь в службу поддержки того антивируса, который вы использовали.
  3. Используйте бесплатную утилиту Dr.Web CureIt!, чтобы исключить влияние вирусов, блокирующих установку антивируса. Повторите попытку установки.
  4. Настройте запуск системы в режиме чистой загрузки, чтобы исключить влияние различного ПО на работу системы, следуя рекомендациям Microsoft. Для этого:
    1. На вкладках Службы и Автозагрузка снимите флажки со всех элементов, кроме Microsoft.
    2. Перезагрузите компьютер.
    3. После запуска системы в режиме чистой загрузки попробуйте установить антивирус еще раз.

Если ошибка сохраняется, обратитесь в службу технической поддержки, приложив к запросу отчет утилиты DwSysInfo.

Как создать отчет SysInfo?

Ошибка 32

Возникает при критических повреждениях, когда завершить установку или восстановить продукт по каким-то причинам уже невозможно.

Решение:

Исключите возможные проблемы с диском, на котором проводится установка, с помощью утилиты chkdsk:

  1. Вызовите командную строку от имени администратора. Для этого откройте Пуск → Все программы — Стандартные, нажмите правой кнопкой мыши на Командную строку. В открывшемся меню выберите Запуск от имени администратора.
  2. Для проверки диска C:/ выполните следующую команду:
    chkdsk C: /F /R
    Утилита предложит осуществить проверку диска C:/ при следующей загрузке компьютера. Согласитесь и перезагрузите компьютер. При загрузке начнется проверка диска. Отменять ее не нужно, необходимо дождаться окончания проверки.

Если антивирус присутствует в списке установленных приложений, выполните полное удаление антивируса штатными средствами системы. Если удаление не прошло, скачайте и запустите утилиту экстренного удаления. Перезагрузите компьютер и повторите установку.

Если ошибка сохраняется, обратитесь в службу технической поддержки, приложив к запросу отчет утилиты DwSysInfo.

Как создать отчет SysInfo?

Ошибка службы BFE при установке

Для функционирования некоторых компонентов программы Dr.Web необходимо наличие запущенной службы базового модуля фильтрации (BFE). В случае если данная служба отсутствует или повреждена, установка Dr.Web будет невозможна. Повреждение или отсутствие службы BFE может указывать на наличие угроз безопасности вашего компьютера.

Если попытка установки программы Dr.Web завершилась с ошибкой службы BFE, выполните следующие действия:

  1. Просканируйте систему при помощи лечащей утилиты CureIt! от компании «Доктор Веб». Скачать утилиту вы можете на сайте.
  2. Восстановите службу BFE. Для этого вы можете воспользоваться утилитой для устранения проблем в работе брандмауэра от компании Microsoft (для операционных систем Windows 7 и выше).
  3. Запустите Мастер установки Dr.Web и произведите установку согласно штатной процедуре, приведенной выше.

Если ошибка сохраняется, обратитесь в службу технической поддержки, приложив к запросу отчет утилиты DwSysInfo.

Как создать отчет SysInfo?

Корпоративные продукты (Dr.Web Enterprise Security Suite) — ошибки при установке Агента

Ошибка 140

Не получилось распаковать репозиторий в каталог %ProgramData%Doctor WebUpdaterrepo.

Возможные причины: следы предыдущих установок продукта и/или отсутствие прав на запись в директорию. Также к появлению ошибки могут привести проблемы непосредственно с дистрибутивом.

Решение:

  1. Проверьте, существует ли в системе каталог C:ProgramDataDoctor Web (каталог ProgramData по умолчанию является скрытым).
  2. Если каталог существует:
    • проверьте, нет ли ограничений на запись для ProgramData и Doctor Web;
    • проверьте, не менялся ли владелец каталога;
    • попробуйте удалить каталог C:ProgramDataDoctor Web.
  3. Если проблема сохраняется, запустите утилиту удаления Dr.Web для Windows.
  4. После перезагрузки ОС попробуйте повторить установку.
  5. При повторении проблемы попробуйте заново загрузить дистрибутив и повторить установку.

Обратите внимание: установке также может препятствовать стороннее ПО.

Если установка по-прежнему завершается ошибкой, обратитесь в службу технической поддержки, приложив к запросу отчет утилиты DwSysInfo.

Как создать отчет SysInfo?

Ошибка 142

Не получилось записать значение InstallId в ветку HKLMSOFTWAREDoctor WebSettingsEs

Возможная причина: установке мешают следы модуля самозащиты в системе.

Решение:

  1. Скачайте и запустите утилиту удаления Dr.Web для Windows.
  2. Повторите попытку установки.
  3. Если ошибка сохраняется и/или запустить утилиту удаления не удается, обратитесь в службу технической поддержки, приложив к запросу отчет утилиты DwSysInfo.

Как создать отчет SysInfo?

Ошибки 144, 146

В подкаталогах репозитория отсутствует файл drwupsrv.exe.lzma нужной версии и разрядности (либо он не был загружен в случае установки по сети, либо не был распакован из дистрибутива).

Возможные причины: ошибки на жестком диске или нестабильное подключение к сети.

Решение:

  1. Проведите проверку жесткого диска на наличие ошибок с помощью штатной утилиты chkdsk.
    • Откройте Пуск → Все программы → Стандартные. Щелкните правой кнопкой мыши пункт Командная строка и выберите Запуск от имени Администратора.
    • Для проверки тома C: введите следующую команду:
      chkdsk C: /F /R
    • При этом утилита предложит осуществить проверку диска «C:» при следующей загрузке. Согласитесь и перезагрузите ПК.
    • Дождитесь окончания проверки и загрузки ОС.
  2. Скачайте и запустите утилиту удаления Dr.Web для Windows. После завершения ее работы перезагрузите компьютер.
  3. Повторите попытку установки антивируса.

Вы также можете использовать для установки полный инсталляционный пакет Агента.

Если ошибка сохраняется, обратитесь в службу технической поддержки, приложив к запросу отчет утилиты SysInfo.

Как создать отчет SysInfo?

Ошибки 150, 156

Не получилось записать изменения по адресу HKLMSOFTWAREDoctor WebInstalledComponents

Возможная причина: установке мешают следы приложения Dr.Web, установленного в системе ранее.

Решение:

  1. Скачайте и запустите утилиту удаления Dr.Web для Windows.
  2. Повторите попытку установки.
  3. Если ошибка сохраняется и/или применить утилиту не удается, обратитесь в службу технической поддержки, приложив к запросу отчет утилиты SysInfo.

Как создать отчет SysInfo?

Ошибка 162

Не удалось прочитать открытый ключ (drwcsd.pub).

Решение:

  1. Убедитесь, что используется релизная версия инсталлятора. В частности, проверьте актуальность репозитория по инструкции, по необходимости выполните обновление и повторите загрузку инсталлятора.
  2. Скопируйте файл drwcsd-certificate.pem (сертификат) или drwcsd.pub (открытый ключ) из каталога C:Program FilesDrWeb Serverwebmininstall в каталог, где лежит инсталлятор Агента Dr.Web.
  3. Попробуйте повторить установку, указав в качества адреса сервера его IP-адрес, а на запрос сертификата — сохранённый сертификат.

Если ошибка сохраняется, обратитесь в службу технической поддержки, приложив к запросу отчет утилиты SysInfo.

Как создать отчет SysInfo?

Ошибки 900, 902

Во время выполнения RunUpdaterAction произошла неизвестная ошибка.

Возможная причина: наличие в системе следов приложения Dr.Web.

Решение:

  1. Запустите утилиту удаления Dr.Web для Windows.
  2. Выполните перезагрузку ОС по требованию.
  3. Если ошибка сохраняется, проведите проверку жесткого диска на наличие ошибок с помощью утилиты chkdsk.
    • Для проверки тома C: выполните команду:
      chkdsk C: /F /R
    • Введите команду в окне командной строки Windows (нажмите сочетание клавиш Win+R → введите cmd → нажмите ОК) и нажмите Enter.
    • При этом утилита предложит осуществить проверку диска «C:» при следующей загрузке. Согласитесь и перезагрузите ПК.
    • Дождитесь окончания проверки и загрузки ОС.
    • Перезагрузите ПК, перед запуском ОС начнется тестирование диска.

Если ошибка сохраняется, обратитесь в службу технической поддержки, приложив к запросу отчет утилиты SysInfo.

Как создать отчет SysInfo?

Ошибка в работе антивируса после завершения установки

Установка завершается успешно, на иконке Dr.Web появляется желтый треугольник с восклицательным знаком. При наведении на значок можно увидеть текст «Ошибка» (после основной информации), в ленте уведомлений появится сообщение о сбое компонентов и предложение перезагрузить ПК.

Возможная причина: повреждены компоненты Агента.

Решение:

Проверьте актуальность репозитория на Сервере по инструкции, затем дождитесь получения Агентом ревизий. Если версии ревизий и там, и там актуальны — выполните восстановление антивируса штатными средствами ОС.

  1. Откройте Пуск → Панель управления → Программы и компоненты (аналогичный путь для вашей версии Windows) → выберите Dr.Web, нажмите сверху Изменить → Восстановить программу.
  2. После окончания восстановления перезагрузите ПК и проверьте работу обновления Dr.Web.
    Если ошибка сохраняется, проведите проверку жесткого диска на наличие ошибок с помощью утилиты chkdsk.
  3. Для проверки тома C: выполните команду:
    chkdsk C: /F /R
  4. Введите команду в окне командной строки Windows (нажмите сочетание клавиш Win+R → введите cmd → нажмите ОК) и нажмите Enter.
  5. При этом утилита предложит осуществить проверку диска «C:» при следующей загрузке. Согласитесь и перезагрузите ПК.
  6. Дождитесь окончания проверки и загрузки ОС.
  7. Перезагрузите ПК, перед запуском ОС начнется тестирование диска.

Если ошибка сохраняется, обратитесь в службу технической поддержки, приложив к запросу отчет утилиты SysInfo.

Как создать отчет

Корпоративные продукты (Dr.Web Enterprise Security Suite) — ошибки при установке Сервера

Ошибка 36

Не удалось обновить структуру базы данных до новой версии.

Решение:

Установка сервера с внутренней базой данных по умолчанию

  1. Установите Сервер Dr.Web с внутренней базой данных по умолчанию.
  2. Если установка прошла успешно, подключите вместо внутренней базы данных имеющуюся внешнюю.

Импорт базы данных внутренними средствами Сервера

  1. Сделайте экспорт базы данных при остановленном Сервере (подробнее про экспорт базы данных).
  2. Установите новый Сервер с чистой базой данных.
  3. После установки остановите работу Сервера.
  4. Импорт базы данных с обновлением структуры производится следующей командой:
    drwcsd modexecdb database-import-and-upgrade <файл экспорта базы данных>

Если установка по-прежнему завершается ошибкой, обратитесь в службу технической поддержки, приложив к запросу отчет утилиты DwSysInfo.

Как создать отчет SysInfo?

Ошибка 40

Текст ошибки: «Не удалось инициализировать или очистить базу данных»

Возможные причины: база данных уже инициализирована (существует) или же внешняя база данных отсутствует/недоступна.

Решение:

Установка сервера с внутренней базой данных по умолчанию

  1. Установите Сервер Dr.Web с внутренней базой данных по умолчанию.
  2. Если установка прошла успешно, подключите вместо внутренней базы данных имеющуюся внешнюю.

Установка сервера с чистой внешней базой данных

Создайте или очистите уже созданную базу данных средствами СУБД. Руководство по подключению, а также по подготовке и настройке базы данных можно найти в документации. В процессе установки укажите параметры подключения к базе данных. Ее инициализация произойдет в процессе установки.

Убедитесь, что используется поддерживаемая версия СУБД. Если используется ODBC-драйвер — убедитесь, что установлена его свежая версия.

Пользователь, которым планируется подключаться к СУБД, должен быть ее владельцем.

Если новая база данных создается в СУБД Microsoft SQL — необходимо указать сортировку с учетом регистра (суффикс _CS) и с учетом диакритических знаков (суффикс _AS).

Если установка по-прежнему завершается ошибкой, обратитесь в службу технической поддержки, приложив к запросу отчет утилиты DwSysInfo.

Как создать отчет

Ошибки при обновлении

Ошибка 2

Может возникать по различным причинам.

Решение:

  1. Проверьте доступность сети.
  2. Проведите проверку жесткого диска на наличие ошибок с помощью утилиты chkdsk:
    1. Вызовите командную строку. Для этого нужно нажать сочетание клавиш Win+R → ввести cmd → нажать ОК
    2. Для проверки диска C:/ выполните следующую команду:
      chkdsk C: /F /R
      Утилита предложит осуществить проверку диска C:/ при следующей загрузке компьютера. Согласитесь и перезагрузите компьютер. При загрузке начнется проверка диска. Отменять ее не нужно, необходимо дождаться окончания проверки.
  3. Выполните восстановление антивируса. Откройте Пуск → Панель управления → Программы и компоненты (аналогичный путь для вашей версии Windows) → выберите Dr.Web, нажмите сверху Изменить → Восстановить программу.
    После окончания восстановления перезагрузите компьютер и проверьте работу обновления Dr.Web.
  4. Если ошибка возникла при обновлении по зеркалу — убедитесь что папка обновлений доступна.
  5. Если ошибка обновления сохранится, нажмите на значок Dr.Web справа внизу → Центр безопасности → значок замка слева снизу→ значок шестеренки справа сверху → Общие → Дополнительные настройки → Журнал → Изменить. Установите флажок Обновление Dr.Web, нажмите ОК. Закройте настройки, повторите попытку обновления. После появления ошибки сформируйте отчет, выбрав Поддержка → Перейти к мастеру отчетов → Создать отчет.

После этого обратитесь в службу технической поддержки, приложив к запросу созданный отчет. Затем аналогичным образом отключите ведение подробного отчета для модуля обновления (уберите флажок Обновление Dr.Web).

Ошибка 4

Может возникать по различным причинам.

Решение:

  1. Откройте меню Dr.Web, выберите пункт Лицензия. Убедитесь, что используется активная лицензия. Если в списке присутствуют записи о других лицензиях, кроме активной, удалите их.
  2. В некоторых случаях придется выполнить восстановление приложения штатными средствами. Для этого:
    1. Откройте Панель управления → раздел Программы или Программы и компоненты.
    2. Выберите из списка установленных программ антивирус Dr.Web, в верхней части открытого окна нажмите кнопку Изменить. В открывшемся окне выберите вариант Восстановить программу.
  3. После завершения процедуры восстановления перезагрузите компьютер и повторно проверьте работу обновлений.
  4. Если ошибка 4 найдена в логах — причина в переданном неверном параметре для апдейтера.

Если ошибка сохраняется, обратитесь в службу технической поддержки, приложив к запросу отчет утилиты DwSysInfo.

Как создать отчет SysInfo?

Ошибка 7

Обновление уже запущено (т.е. ошибку провоцирует повторный запуск). Может возникать по различным причинам.

Решение:

  1. Подождите несколько минут — этого должно хватить для завершения обновления.
  2. Проведите проверку жесткого диска на наличие ошибок с помощью утилиты chkdsk:
    1. Вызовите командную строку. Для этого нужно нажать сочетание клавиш Win+R → ввести cmd → нажать ОК
    2. Для проверки диска C:/ выполните следующую команду:
      chkdsk C: /F /R
      Утилита предложит осуществить проверку диска C:/ при следующей загрузке компьютера. Согласитесь и перезагрузите компьютер. При загрузке начнется проверка диска. Отменять ее не нужно, необходимо дождаться окончания проверки.
  3. Выполните восстановление антивируса. Откройте Пуск → Панель управления → Программы и компоненты (путь указан для ОС Windows 7 и выше. Путь к разделу в более ранних версиях Windows выглядит иначе) → выберите Dr.Web, нажмите сверху Изменить → Восстановить программу. После окончания восстановления перезагрузите компьютер и проверьте работу обновления Dr.Web.

Если установлена свежая версия антивируса, восстановление диска и антивируса проведено, но ошибка обновления сохраняется, то нажмите на значок Dr.Web справа внизу → Центр безопасности → значок замка → значок шестеренки → Общие → Дополнительные настройки → Журнал → Изменить. Установите флажок Обновление Dr.Web, нажмите ОК. Закройте настройки, повторите попытку обновления. После появления ошибки сформируйте отчет, выбрав Поддержка → Перейти к мастеру отчетов → Создать отчет.

После этого обратитесь в службу технической поддержки, приложив к запросу созданный отчет. Затем аналогичным образом отключите ведение подробного отчета для модуля обновления (уберите флажок Обновление Dr.Web).

Ошибка 8

Нет обновлений для текущих продуктов или компонентов. Не является ошибкой.

Ошибка 9

Невозможно подключиться к серверам обновления.

Решение:

Проверьте подключение к Интернету — без него обновление всегда будет завершаться ошибкой 9.

Если подключение к Интернету работает корректно, но ошибка сохраняется — обратитесь в службу технической поддержки, приложив к запросу отчет утилиты DwSysInfo.

Как создать отчет SysInfo?

Ошибка 10

Ошибка целостности репозитория.

Решение:

Если ошибка возникает в процессе получения обновлений через зеркало обновлений, пожалуйста, изучите общие рекомендации по его настройке.

Если проблема не решена, обратитесь в службу технической поддержки, приложив к запросу отчет утилиты DwSysInfo.

Как создать отчет SysInfo?

Ошибка 11

Не получилось отключить самозащиту (если в системе уже установлен модуль Самозащиты).

Ошибка может быть вызвана рядом причин:

  1. Используется устаревшая версия антивируса. Чаще всего встречается, если по ошибке была установлена старая версия продуктов Dr.Web или была попытка выполнить обновление на системах, где оно не проводилось в течение долгого времени.
    Решение: удалите старую версию антивируса и установите актуальную, скачав ее по ссылке.
  2. Файлы обновления повреждены (из-за проблем с диском или системного сбоя при обновлении).

    Решение: проверьте и исправьте ошибки диска, проведите процедуру восстановления антивируса:

    1. Проведите проверку жесткого диска на наличие ошибок с помощью утилиты chkdsk:
      • Вызовите командную строку. Для этого нужно нажать сочетание клавиш Win+R → ввести cmd → нажать ОК
        Для проверки диска C:/ выполните следующую команду:
        chkdsk C: /F /R
        Утилита предложит осуществить проверку диска C:/ при следующей загрузке компьютера. Согласитесь и перезагрузите компьютер. При загрузке начнется проверка диска. Отменять ее не нужно, необходимо дождаться окончания проверки.
    2. Выполните восстановление антивируса. Откройте Пуск → Панель управления → Программы и компоненты (аналогичный путь для вашей версии Windows) → выберите Dr.Web, нажмите сверху Изменить → Восстановить программу.
      После окончания восстановления перезагрузите компьютер и проверьте работу обновления Dr.Web.

Если установлена свежая версия антивируса, восстановление диска и антивируса проведено, но ошибка обновления сохраняется, то нажмите на значок Dr.Web справа внизу → Центр безопасности → значок замка → значок шестеренки → Общие → Дополнительные настройки → Журнал → Изменить. Установите флажок Обновление Dr.Web, нажмите ОК. Закройте настройки, повторите попытку обновления. После появления ошибки сформируйте отчет, выбрав Поддержка → Перейти к мастеру отчетов → Создать отчет.

После этого обратитесь в службу технической поддержки, приложив к запросу созданный отчет. Затем аналогичным образом отключите ведение подробного отчета для модуля обновления (уберите флажок Обновление Dr.Web).

Ошибка 12

Лицензия заблокирована на сервере. Вероятно, в Менеджере лицензий в качестве текущей лицензии указана уже истекшая или заблокированная (по причине продления, замены, разбивки или слияния) лицензия.

Решение:

  1. Зарегистрируйте новую лицензию в Менеджере лицензий.
  2. Удалите истекшую (или заблокированную) лицензию из Менеджера лицензий. В списке лицензий должна остаться только одна действующая лицензия.
Ошибка 13

Отсутствие лицензии. В Менеджере лицензий нет ни одной действующей лицензии.

Решение:

Зарегистрируйте новую лицензию Dr.Web.

Ошибка 15

Продукт не поддерживается.

Решение:

Сроки поддержки продуктов Dr.Web обозначены на официальном сайте. Для более подробного ответа и/или для помощи с установкой поддерживаемого продукта оформите письменный запрос в службу технической поддержки.

Ошибка 16

Лицензия не найдена в базе на сервере (ключевой файл поврежден) либо попытка обновления происходит с истекшей лицензией.

Решение:

Найдите письмо с ключевым файлом, который был выслан на ваш регистрационный e-mail.

  1. Сохраните приложенный к этому письму архив с ключевым файлом на жесткий диск вашего компьютера.
  2. Разархивируйте его, щелкнув по архиву правой кнопкой мыши и выбрав пункт Извлечь всё.
  3. Укажите папку, в которую необходимо поместить ключевой файл (например, на Рабочий стол).
  4. Щелкните по значку антивируса в области уведомлений и перейдите на вкладку Лицензия. Нажмите на замок, чтобы перейти в административный режим (если у вас установлен пароль, необходимо его ввести). Нажмите Купить или активировать новую лицензию. В открывшемся окне введите серийный номер новой лицензии и нажмите Активировать либо нажмите на или укажите ключевой файл и укажите путь к сохраненному ранее ключевому файлу.

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

Если ошибка сохраняется — пожалуйста, оформите письменный запрос в службу технической поддержки, приложив к запросу отчет утилиты Sysinfo.

Как создать отчет SysInfo?

Ошибка 17

Зона обновления не пригодна (разные версии).

Решение:

Обратитесь в службу технической поддержки, приложив к запросу отчет утилиты DwSysInfo.

Как создать отчет SysInfo?

Ошибка 31

Используется ключ, предназначенный для тестирования продукта (не коммерческий). При этом у пользователя установлен коммерческий продукт.

Решение:

  1. Зарегистрируйте новую лицензию в Менеджере лицензий.
  2. Удалите предыдущую (тестовую) лицензию из Менеджера лицензий. В списке лицензий должна остаться только одна действующая лицензия.

Коды и описание ошибок для продуктов Dr.Web под Linux

Коды ошибок и описание к ним можно найти в актуальной документации к Dr.Web Home Security Suite / Dr.Web Enterprise Security Suite / Dr.Web Desktop Security Suite / Dr.Web Security Space (для Linux).

Общие рекомендации по идентификации ошибок

  • Для уточнения места и причины возникновения ошибки ознакомьтесь с содержимым журнала Dr.Web для Linux (по умолчанию он находится в файле /var/log/syslog или /var/log/messages, в зависимости от используемой ОС). Также вы можете воспользоваться командой drweb-ctl log.
  • Для облегчения идентификации ошибки рекомендуется настроить вывод журнала в отдельный файл и разрешить вывод расширенной отладочной информации. Для этого выполните следующие команды:
    • # drweb-ctl cfset Root.Log <путь к файлу журнала>
    • # drweb-ctl cfset Root.DefaultLogLevel DEBUG
  • Для возврата настроек ведения журнала по умолчанию выполните следующие команды:
    • # drweb-ctl cfset Root.Log -r
    • # drweb-ctl cfset Root.DefaultLogLevel -r

Коды и описание ошибок для Dr.Web для почтовых серверов UNIX

Коды ошибок и описание к ним можно найти в актуальной документации к Dr.Web Enterprise Security Suite / Dr.Web Mail Security Suite (для UNIX).

Общие рекомендации по идентификации ошибок

  • Для уточнения места и причины возникновения ошибки ознакомьтесь с содержимым журнала Dr.Web для почтовых серверов UNIX (по умолчанию он находится в файле /var/log/syslog или /var/log/messages, в зависимости от используемой ОС). Также вы можете воспользоваться командой drweb-ctl log.
  • Для облегчения идентификации ошибки рекомендуется настроить вывод журнала в отдельный файл и разрешить вывод расширенной отладочной информации. Для этого выполните следующие команды:
    • drweb-ctl cfset Root.Log <путь к файлу журнала>
    • drweb-ctl cfset Root.DefaultLogLevel DEBUG
  • Для возврата настроек ведения журнала по умолчанию выполните следующие команды:
    • drweb-ctl cfset Root.Log -r
    • drweb-ctl cfset Root.DefaultLogLevel -r

Код ошибки 1073740940 (-1073740940, если быть точнее) может возникать в Minecraft по самым разным причинам, однако чаще всего ее вызывает следующее:

  • устаревшая версия Java;
  • недостаток выделенной оперативной памяти;
  • конфликтующие с игрой модификации.

Итак, что можно сделать, чтобы избавиться от ошибки 1073740940? Во-первых, вам нужно обновить версию Java на своем компьютере. Возможно, вы решили поиграть в Minecraft на только что установленной ОС, и еще не успели установить актуальную версию Java.

Также можно попробовать выделить чуть больше оперативной памяти для игры. Запустите лаунчер Minecraft и перейдите в раздел загрузок. У последнего релиза кликните на значок ••• и выберите «Редактировать». Опуститесь к строке аргументов JVM и вставьте в пустую строку значение -Xmx4G или -Xmx8G (зависит от объема ОЗУ в вашем ПК). Сохраните изменения и запустите игру.

Согласно сообщениям в сети, некоторые модификации также способны вызывать появление кода 1073740940 в Minecraft. К примеру, после продолжительных исследований, ребята на Reddit определили, что данную ошибку может вызывать мод Supplementaries (от MehVahdJukaar). Решение — удаление проблемного мода либо установка его другой версии.

The program returns the user N number of odd squares starting from 1.

From numbers 5-10 and then 20, (I didn’t go further) when deleting array A it crashes with the error message: «Process returned -1073740940 (0xC0000374)». Which is apparently a memory violation?

#include <iostream>
using namespace std;

int main(){
    int ok;
    int counter;
    do {
        int size;
        while (true) {
            cout << "Enter the number of perfect odd squares you want" << endl;
            cin >> size;
            if(size<1) {
                cout << "Enter a valid number" << endl;
                continue;
            }
            else break;
        }
        if (size%2==0) counter=size*2-1;
        else counter=size*2;
        int *A = new int[size];
        for (int i=1; i<=counter; i=i+2){
            A[i]=i*i;
            cout<<A[i] << endl;
        }
        delete[]A;

        cout << " Continue (1) or quit (0)?" << endl;
        cin >> ok;

    }while(ok==1);

}

asked Nov 25, 2021 at 22:02

Anatolijs Karpovs's user avatar

2

From the NTSTATUS reference:

0xC0000374 STATUS_HEAP_CORRUPTION — A heap has been corrupted

You appear to access A (a heap allocated object) out of bounds — A[0] through A[size-1] are valid elements to access but counter goes as high as 2*size. Any attempts to write to values past A[size-1] can corrupt the heap leading to this error.

Calculate counter first and use that as the allocation size.

answered Nov 25, 2021 at 22:09

nanofarad's user avatar

nanofaradnanofarad

39.8k4 gold badges88 silver badges117 bronze badges

0

The program returns the user N number of odd squares starting from 1.

From numbers 5-10 and then 20, (I didn’t go further) when deleting array A it crashes with the error message: «Process returned -1073740940 (0xC0000374)». Which is apparently a memory violation?

#include <iostream>
using namespace std;

int main(){
    int ok;
    int counter;
    do {
        int size;
        while (true) {
            cout << "Enter the number of perfect odd squares you want" << endl;
            cin >> size;
            if(size<1) {
                cout << "Enter a valid number" << endl;
                continue;
            }
            else break;
        }
        if (size%2==0) counter=size*2-1;
        else counter=size*2;
        int *A = new int[size];
        for (int i=1; i<=counter; i=i+2){
            A[i]=i*i;
            cout<<A[i] << endl;
        }
        delete[]A;

        cout << " Continue (1) or quit (0)?" << endl;
        cin >> ok;

    }while(ok==1);

}

asked Nov 25, 2021 at 22:02

Anatolijs Karpovs's user avatar

2

From the NTSTATUS reference:

0xC0000374 STATUS_HEAP_CORRUPTION — A heap has been corrupted

You appear to access A (a heap allocated object) out of bounds — A[0] through A[size-1] are valid elements to access but counter goes as high as 2*size. Any attempts to write to values past A[size-1] can corrupt the heap leading to this error.

Calculate counter first and use that as the allocation size.

answered Nov 25, 2021 at 22:09

nanofarad's user avatar

nanofaradnanofarad

39.8k4 gold badges88 silver badges117 bronze badges

0

Принудительное удаление dr web. Полное удаление Dr.Web Security Space. Не удается удалить Dr.Web

Иногда нужно удалить антивирус, даже если он работает достаточно хорошо. На это имеется ряд причин. Например, пользователь решил установить более совместимую с ОС антивирусную программу, или же установил более позднюю версию антивируса и теперь ее нужно поменять. Также, причиной могут быть сбои в системе или нарушения в работе программы из-за серьезной вирусной атаки.

Перед удалением антивируса Доктор Веб нужно подробно ознакомиться с возможными последствиями, которые могут усложнить сам процесс удаления.

На процедуру удаления может повлиять ОС Windows или сам антивирус, который нельзя удалить по каким-то причинам с компьютера. Или же он удаляется, но только частично.

Ниже представлены три метода полного удаления Dr Web с компьютера.

Первый метод: классический

Антивирус, как и другие программы, можно удалить с помощью меню «Установка и удаление программ». Для этого нужно открыть панель «Пуск», перейти в «Настройки», открыть «Панель управления», потом окно «Программы и компоненты». В появившемся списке надо выбрать приложение Doctor Web и нажать «Удалить». Сразу после этого запуститься процесс удаления программы, потом, через некоторое время появится окно, в котором необходимо подтвердить, нужно ли удалить ключ регистрации, а также, настройки в системе. Если пользователь уверен, что не будет использовать на компьютере антивирус Doctor Web, то ему необходимо выбрать вариант удаления всех настроек и дождаться завершения процедуры.

Лучший бесплатный антивирус — Dr Web Security Space (beta) 2022

Чтобы полностью удалить антивирусную программу Доктор Веб , после того, как процедура удаления завершиться, надо вручную удалить еще две папки со служебными файлами. Первая папка – установочная, она располагается в: «Program FilesDrWeb» (как правило на диске C). Другая папка скрыта и находится на диске C по адресу:UsersПользовательApplication DataDrWeb. Эту папку можно удалить, но делать это не обязательно. Она содержит служебные данные, например, о дате установки и удалении антивирусной программы, различные статистические данные.

Второй метод удаления антивируса Доктор Веб

Антивирус Доктор Веб можно удалить также и в безопасном режиме. Для выполнения этой задачи в данном случае надо сделать следующее:

  1. Перезагрузить компьютер;
  2. Перед началом запуска операционной системы нужно нажать клавишу F8. Тогда откроется окно безопасного режима. Удаление программы с компьютера проводится аналогичным образом, что и в первом методе.

Если вышеописанные методы не помогли удалить антивирусную программу Доктор Веб, можно применить еще один способ.

Третий метод удаления Доктор Веб с компьютера: применение утилиты

Третий способ удаления Доктор Веб предполагает использование специальной утилиты, которая называется “Утилита удаления Dr. Web”. Она была создана разработчиком Dr.Web для применения в случаях, когда стандартные средства операционной системы не могут удалить приложение самостоятельно. Утилита представлена на сайте разработчика и находится в свободном доступе.

Обновление компонентов Dr.Web Security Space без Интернета

Нужно скачать утилиту с официального сайта, установить ее на компьютер, ввести капчу (на появившейся картинке будут изображены цифры, которые нужно ввести в специальное поле под ней). Далее необходимо нажать «Удалить», после этого следовать инструкциям, которые отображаются в программе, и в конце перезагрузить компьютер. При следующем включении операционная система запуститься без антивирусной программы Dr.Web.

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

Установить новый антивирус бывает трудно в том случае, если старый был некорректно удален. При неполном удалении возможны и другие проблемы, например, торможения или сбое в работе. Многие антивирусные компании заботятся о пользователях даже в том случае, если их продукт необходимо удалить. В этот раз речь пойдет о правильном удалении антивируса Dr.Web.

К слову, удалить ее можно и с помощью стандартного системного компонента Windows «Установка и удаление программ » («Программы и компоненты »). Однако при аварийной ситуации для удаления предусмотрена специальная утилита. Ее рекомендуется использовать при возникновении системной ошибки, в результате которой ручное удаление невозможно или было произведено, но некорректно.

Под некорректным удалением подразумевается частичное удаление программы, после чего в системе присутствуют «остатки» антивируса в виде файлов и папок. Также утилиту рекомендуется использовать, если деинсталлятор антивируса выдает ошибку при удалении или вообще не запускается.

Утилита Dr.Web Remover и инструкция по использованию

Также есть специальная утилита для этого — Remover.

  1. Нажмите сюда и загрузите программу с официального сайта компании. Утилита полностью бесплатная и не требует установки на ПК. Также стоит отметить, что ее нужно запускать от имени администратора. Для этого нажмите по ярлыку программы правой клавишей мыши и выберите соответствующий пункт.
  2. После запуска программы отобразится капча (защитный код), которую необходимо правильно ввести. Это объясняется тем, что, возможно, удалить антивирус пытается не пользователь, а другое (как правило, вредоносное) приложение. Защитный код в этом случае служит подтверждением того, что действия совершает именно человек.
  3. После ввода капчи нажмите кнопку «Удалить ». При желании код можно обновить на другой (если текущий кажется неразборчивым), либо прослушать (для слабовидящих людей).
  4. По окончании работы с утилитой перезагрузите компьютер.

С помощью этой программы вы можете удалить продукты Dr.Web следующих версий: 4.33/44; 5.0/6.0/7.0/8.0, а также клиентскую часть Enterprise Suite.

Приветствую, дорогой читатель! Прежде чем приступить к основному вопросу, как удалить Dr.Web с компьютера, давайте для начала разберемся, почему с его удалением могут возникать сложности.

Антивирус, чтобы обеспечить защиту вашего компьютера должен иметь в системе привилегированное положение — запускаться одним из первых, иметь самые высокие права в сравнении с другими программами, заодно всех их контролировать и проверять. Но время от времени возникает необходимость этот антивирус, к примеру Dr.Web, удалить. Причины для удаления различные — установка новой версии, переустановка после сбоев в системе, возможно вирусы нарушили работу вашего антивируса и требуется его переустановка.

В большинстве случаев для удаления программ, нам достаточно, штатных средств Windows: «Пуск» — «Настройка» — «Панель управления» — «Установка и удаление программ» если у вас Windows XP, или через «Пуск» — «Панель управления» — «Программы и компоненты» если у вас Windows 7. Но иногда стандартные средства не справляются со своими функциями, поэтому приходиться решать этот вопрос, другими способам.

Как удалить антивирус Dr. Web с компьютера если он не удаляется

Бороться с этой проблемой можно несколькими вариантами:

  • Перезагружаем компьютер.
  • После включения нажимайте на клавиатуре клавишу F8 (не нажмите один раз и держите, а именно нажимайте с интервалом в 1-2 секунды, до момента пока не началась загрузка операционной системы).
  • Если все сделано правильно, должно появиться окно, в котором будет пункт «Безопасный режим». После этого пробуете воспользоваться стандартными средствами Windows, как описывал выше.

Если удаление антивируса Dr. Web невозможно, тогда переходим к другому способу.

2. Если Dr.Web не удалился в безопасном режиме, поможет специальная утилита от разработчика Dr. Web. Скачать ее можно на официальном сайте по ссылке

Для скачивания утилиты, нажмите «Утилита удаления Dr.Web».

Утилита была создана как раз для ситуации, когда не справляется сам Windows. После скачивания запускаем утилиту.

Для того чтобы удостовериться, что вы ее запустили не случайно и точно уверены что хотите удалить антивирус Dr. Web, она покажет картинку с цифрами, которые нужно ввести в поле ниже.

Если цифры неразборчивы, есть возможность попросить программу озвучить их (кнопка с динамиком, правда цифры вы услышите на английском языке) или сформировать другую картинку с цифрами (кнопка с круговой стрелкой).

Когда цифры правильно распознаны и введены, нажимаем кнопку «Удалить».

После этого следуем дальнейшим инструкциям, которые предложит Dr.Web. Когда перезагрузится Windows мы получим систему без антивируса Dr.Web.

Теперь можете устанавливать другую версию антивируса. Если вы удаляли антивирус из-за сбоев связанные с Windows или думаете, что ваш компьютер может быть заражен вирусами, то рекомендую обновить антивирус и произвести полную проверку компьютера на вирусы.

Думаю, вы поняли, как удалить антивирус Dr. Web с компьютера и у вас не возникнет сложности при его удалении.

На этом все, до скорых встреч!

Если удалить Dr.Web стандартными средствами Windows не удаётся, необходимо использовать утилиту аварийного удаления Dr.Web Remover, скачать которую можно по ссылке: https://download.geo.drweb.com/pub/drweb/tools/drw_remover.exe .

Запустите скачанный файл, введите цифры с картинки (необходимо для отключения самозащиты Dr.Web) и нажмите Удалить. После завершения процесса необходимо перезагрузить ПК.

Если после использования Dr.Web Remover удаление завершилось неудачей, необходимо составить запрос в .

Требуется удалить антивирус. Как это сделать?

  • Windows XP: «Пуск» → «Панель управления» → «Установка и удаление программ» → найдите в списке «Dr.Web Security Space» и нажмите на кнопку «Удалить».
  • Windows Vista, Windows 7: «Пуск» → «Панель управления» → «Удаление программы» → найдите в списке «Dr.Web Security Space» и нажмите на кнопку «Удалить».
  • Windows 8/8.1: нажмите последовательно на клавиши «Windows» + «X» и в открывшемся меню выберите «Панель управления» → «Удаление программы». Найдите в списке «Dr.Web Security Space» и нажмите на кнопку «Удалить».

Если Антивирус не находится в списке установленных программ Панели Управления или попытка удаления завершается ошибкой, необходимо использовать утилиту аварийного удаления Dr.Web. Ее можно скачать . Запустите Dr.Web Remover, введите код с картинки (это необходимо, чтобы подтвердить, что именно пользователь, а не приложение пытается удалить антивирус) и нажмите Удалить .

Не удается удалить Dr.Web

Если установленная версия антивируса Dr.Web по каким-либо причинам была повреждена и ее нормальное удаление невозможно — воспользуйтесь утилитой аварийного удаления Dr.Web Remover . Запустите Dr.Web Remover, введите код с картинки (это необходимо, чтобы подтвердить, что именно пользователь, а не приложение пытается удалить антивирус) и нажмите Удалить .

Можно ли постоянно пользоваться утилитой Dr.Web Remover, ведь это быстрее?

Утилита не предназначена для использования в качестве основного средства деинсталляции ПО Dr.Web. Утилита Dr.Web Remover — средство аварийного удаления поврежденной версии Dr.Web. Антивирус рекомендуется удалять стандартными средствами Windows.

Порой появляется необходимость в удалении антивируса Доктор Веб даже в том случае, когда к нему нет никаких нареканий. Такое возникает по многим причинам. К примеру, пользователь решил поставить себе на операционную систему более позднюю версию антивируса или же решил ради эксперимента установить другой антивирус. Также причиной может послужить большая вирусная атака на компьютер пользователя, которая повлекла сбой в работе программы.

Перед тем как полностью удалить антивирус Доктор Веб с компьютера необходимо узнать всю информацию которая может усложнить процесс удаления.

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

1. Удаление антивируса при помощи панели инструментов (классический метод удаления программ)

Как и любую другую программу, антивирус можно удалить стандартным методом с помощью меню «Установка и удаление программ». Для этого нажимаем на кнопку «Пуск» и переходим в «Настройки», далее жмем на «Панель управления» и затем «Программы и компоненты».

После появления списка установленных программ, находим и выбираем Doctor Web и нажимаем «Удалить». После нажатия начнется процесс удаления антивируса.Через какое то время появится окошко в котором будет необходимо подтвердить, нужно ли удалить ключ регистрации, а также другие настройки в системе. Когда вы абсолютно уверены, что больше не будете использовать данный антивирус, то выбираем необходимые настройки и дожидаемся, когда завершится процедура.

Чтобы полностью удалить антивирус Доктор Веб с компьютера, после завершения стандартного удаления, необходимо вручную почистить папки со служебными файлами.

Удалим первую папку — установочную. Для этого переходим на диск «С» в «Program Files», папка называется «DrWeb». Теперь удалим скрытую папку. Для этого перейдем на диске «С» в раздел UsersПользовательApplication Data и найдем там папку DrWeb. Данную папку можно как удалить, так и оставить на своем месте.

В ней располагаются служебные данные: дата установки антивируса, дата удаления антивируса, разные статистические данные.

Делаем перезагрузку системы.

2. Удаление антивируса в безопасном режиме

Антивирус Доктор Веб также возможно удалить, когда компьютер загружен в безопасном режиме. Для того, чтоб проделать данную процедуру необходимо выполнить следующие шаги:

  • перезагружаем компьютер
  • перед запуском операционной системы постоянно нажимаем клавишу «F8». А затем выбираем загрузку в безопасном режиме. Удаление антивируса происходит подобным образом, что был рассмотрен выше.

Но порой не помогают эти методы по полному удалению антивируса Доктор Веб. Тогда воспользуемся еще одним способом, которые рекомендует техническая поддержка антивируса.

3. Удаление антивируса Доктор Веб при помощи утилиты Anti-Virus Remover

Anti-Virus Remover — это специальная утилита-помощник, разработанная компанией «Доктор Веб». Ее создали специально для пользователей у которых появились проблемы в различных ситуациях: не получается удалить антивирусную программу, забыли пароль от антивируса, сохраненные файлы ранее удаленного антивируса не позволяют поставить антивирусную программу, нет возможности удалить стандартным методом через «панель управления» и т.д.

Открываем свой браузер и переходим на официальный сайт «Доктор Веб» http://www.drweb.ru/

Вверху страницы находим раздел «Скачать» и в появившейся панели выбираем»Аптечка сисадмина». Далее загружаем себе на компьютер утилиту Anti-Virus Remover по ссылке «Утилита удаления». Или загружаем нажав на drw_remover.exe

Для правильного удаления антивируса Доктор Веб запускаем скаченную утилиту от имени администратора, для этого правой кнопочкой мышки нажимаем по иконке утилиты запуск из контекстного меню.

Вводим появившиеся данные которые отображены на картинке в поле «Введите цифры..». Это необходимо сделать по одной причине, антивирус должен вас идентифицировать как «живого» пользователя (так как вирусы порой пытаюстся запустить деинсталятор для удаления антивирусов).

Утилита Anti-Virus Remover запросит у вас разрешение перезагрузить Windows. Это позволит удалить все папки и файлы Dr.Web. В информационном окошке «Для завершения работы» нажимаем «Да».

После перезагрузки компьютера, вы можете устанавливать любой другой антивирус.

Источник: redcomrade.ru

Ошибка обновления: -1073740940 (Windows 10 1903)

- - - - -

Закрыто

  • Тема закрыта

14 ответов в этой теме

#1 Kord

  • Posters
  • 30 Сообщений:
  • Отправлено 06 Ноябрь 2021 — 15:34

    Здравструйте. Есть ПК с Windows 10 v1903 и DrWeb Security Space 12, у которого нет (и не будет) подключения к интернету. Обновления для Доктора скачиваются с других ПК с помощью файлов drwupsrv.exe и drwebzones.xml по команде:
    drwupsrv.exe -c download -r «папка» -s90 —zones=drwzones.xml —key-file «файл ключа»

    Файлы drwupsrv.exe и drwebzones.xml используются всегда самые свежие.
    На протяжении нескольких лет данная схема всегда работала без сбоев, обновлялся с частотой раз в месяц, 2 дня назад сделал крайнее обновление — все хорошо. Сегодня понадобилось с помощью Акрониса восстановить раздел с Windows из образа, сделанного аж в 2019 году. Теперь Доктор образца 2019 года при обновлении выдаёт код ошибки: -1073740940. Если в настройках включить только обновление вирусных баз, то обновление проходит успешно.

    :)

    Я почти на 100% уверен, что проблему можно решить путем переустановки Доктора из свежего дистрибутива, но хотелось бы понять в чем причина возникновения этой ошибки и как можно обновить старые модули Доктора без переустановки

    PS: логи с этой машины скинуть весьма проблематично, но если это необходимо — напишите, сделаю

    Сообщение было изменено Kord: 06 Ноябрь 2021 — 15:35

    #2 Dmitry_rus

    Dmitry_rus

  • Helpers
  • 3 275 Сообщений:
  • Отправлено 06 Ноябрь 2021 — 17:12

    Так, в качестве предположений (без логов гадать бессмысленно):

    1. Прочекайте файловую систему на предмет ошибок.

    2. Не исключено, что структура репозитория со времен 2019 г. несколько изменилась, и апдейтер не совсем корректно с ней работает.

    #3 Kord

  • Posters
  • 30 Сообщений:
  • Отправлено 06 Ноябрь 2021 — 17:24

    Нашёл у себя в закромах базы от 26.02.2021, попробовал с них обновиться и обновление прошло успешно! Перезагружаю ПК, как того попросил Доктор, пробую обновиться со свежих баз: обновление выполнено успешно!

    Для чистоты эксперимента попробовал ещё раз восстановить образ системы 2019 года: все тоже самое — обновление базами 04.11.2021 выдаёт ошибку, обновление базами 26.02.2021 проходит успешно.

    :)

    Попробовал восстановить образ системы с Windows 7 SP1 (без обновлений) тоже 2019 года, устанавливаю обновление Windows для поддержки SHA256 и Доктор обновляется свежими базами без ошибок

    #4 Kord

  • Posters
  • 30 Сообщений:
  • Отправлено 06 Ноябрь 2021 — 17:34

    Так, в качестве предположений (без логов гадать бессмысленно):
    1. Прочекайте файловую систему на предмет ошибок.
    2. Не исключено, что структура репозитория со времен 2019 г. несколько изменилась, и апдейтер не совсем корректно с ней работает.

    1. Проверил: с файловой системой и самим HDD все в порядке 100%, Акронис использую один и то же уже лет 8, конкретно эта версия не подводила ни разу, да и образ раздела посекторный.
    2. Вполне возможно что так, но на Windows 7 Доктор обновляется с новых баз без проблем

    Какие именно логи нужны? dwupdater.log или ещё что-то?

    #5 VVS

  • Moderators
  • 18 934 Сообщений:
  • Отправлено 06 Ноябрь 2021 — 17:40

    Какие именно логи нужны? dwupdater.log или ещё что-то?

    Для начала именно его.

    #6 Kord

  • Posters
  • 30 Сообщений:
  • Отправлено 06 Ноябрь 2021 — 19:09

    Какие именно логи нужны? dwupdater.log или ещё что-то?

    Для начала именно его.

    1:53 — попытка обновления базами от 04.11.2021 (ошибка)

    1:55 — обновление базами от 26.02.2021 (успешно)

    1:58 — обновление базами от 04.11.2021 (успешно)

    Прикрепленные файлы:

    #7 Dmitry_rus

    Dmitry_rus

  • Helpers
  • 3 275 Сообщений:
  • Отправлено 06 Ноябрь 2021 — 19:51

    При обновлении в 1:53:07 старый апдейтер падает на полпути, затем перезапускается и начинает 2-ю фазу (постапдейт), не завершив собственно апдейт. Возможно, дебажные логи апдейтера смогут как-то пролить свет.

    20211107 01:53:07 [INF] [ Loader ] Download file versions.xml from C:DrWeb-UpdatesUpdatesversions.xml to C:ProgramDataDoctor WebUpdaterrepoversions.xml.newer 20211107 01:53:07 [INF] [ Loader ] Timestamp zone is 20211103183753 20211107 01:53:07 [INF] [ Loader ] Zone C:DrWeb-UpdatesUpdates has valid timestamp for update 20211107 01:53:07 [INF] [ Loader ] Download file certificate.xml from C:DrWeb-UpdatesUpdatescertificate.xml to C:ProgramDataDoctor WebUpdaterrepocertificate.xml.newer 20211107 01:53:07 [INF] [ Loader ] Download file 90products.xml from C:DrWeb-UpdatesUpdates90products.xml to C:ProgramDataDoctor WebUpdaterrepo90products.xml.newer Updater version: 12.0.12.08020, x64, Time : 07 November 2021 01:53:07 Computer name : PC, User name : WORKGROUPPC$ Platform : Microsoft Windows 10 Professional 18362, x64, Locale : 1049 Command line : -c postupdate —progress-to-console —verbosity=info —dws9 —interactive —host-guid=a5564af6-5497-4ec3-9d2e-a8439d75ddc2 —coutname=7C49CEAF1D257329 Copyright (c) Doctor Web, Ltd., 1992-2019 ============================================================================= 20211107 01:53:07 [INF] [ Main ] Logfile: C:ProgramDataDoctor WebLogsdwupdater.log 20211107 01:53:07 [INF] [ Main ] Updater Run as interactive application [ PID: 5724 ]

    #8 Kord

  • Posters
  • 30 Сообщений:
  • Отправлено 06 Ноябрь 2021 — 20:07

    При обновлении в 1:53:07 старый апдейтер падает на полпути, затем перезапускается и начинает 2-ю фазу (постапдейт), не завершив собственно апдейт. Возможно, дебажные логи апдейтера смогут как-то пролить свет.

    :)

    Dmitry_rus, спасибо, что посмотрели.
    В принципе для себя я нашёл выход из ситуации (сначала обновиться февральскими базами, затем — актуальными). Думаю, разработчикам будет не особо интересно тратить время на выяснение причин падения Updater’a двухлетней свежести на устаревшей ОС. Но если что, могу собрать дебажные логи

    #9 Afalin

  • Dr.Web Staff
  • 5 465 Сообщений:
  • Отправлено 07 Ноябрь 2021 — 12:44

    Если там падение с heap corruption на этом products.xml, то совсем не интересно.

    Семь раз отрежь – один раз проверь

    #10 SergSG

  • Posters
  • 14 381 Сообщений:
  • Отправлено 10 Ноябрь 2021 — 15:59

    Структура зона-репы менялась и старый апдейтер об этом не в курсе.

    #11 Kord

  • Posters
  • 30 Сообщений:
  • Отправлено 10 Ноябрь 2021 — 21:52

    STATUS_FAILED_STACK_SWITCH
    Структура зона-репы менялась и старый апдейтер об этом не в курсе.

    Тогда, по идее, апдейтер должен падать на любой ОС, но на Windows 7 проблем нет.

    #12 SergSG

  • Posters
  • 14 381 Сообщений:
  • Отправлено 10 Ноябрь 2021 — 22:54

    STATUS_FAILED_STACK_SWITCH
    Структура зона-репы менялась и старый апдейтер об этом не в курсе.

    Тогда, по идее, апдейтер должен падать на любой ОС, но на Windows 7 проблем нет.

    Это код системной ошибки — винда подавилась апдейтером. И падать, по идее, может на любой ОС, но могут быть и свои нюансы.

    #13 Afalin

  • Dr.Web Staff
  • 5 465 Сообщений:
  • Отправлено 11 Ноябрь 2021 — 09:49

    В зависимости от положения звёзд оно может и не упасть.

    Семь раз отрежь – один раз проверь

    #14 shonyv

  • Posters
  • 81 Сообщений:
  • Отправлено 17 Ноябрь 2021 — 09:12

    Сегодня не хочет доктор обновляться, все по инструкции сделал и ноль результата! А вот в панели управления не восстанавливается пишет ошибка 46

    В камень стрелять, стрелы терять!

    #15 VVS

  • Moderators
  • 18 934 Сообщений:
  • Отправлено 17 Ноябрь 2021 — 09:24

    Сегодня не хочет доктор обновляться, все по инструкции сделал и ноль результата! А вот в панели управления не восстанавливается пишет ошибка 46

    Создайте новую тему, в которую сразу же приложите отчёт доктора.
    Тема закрыта.
    Модератор.

    Источник: forum.drweb.com

    Код ошибки 1073741818 при обновлении антивируса доктор веб

    Не сказать, что не ждал программных сбоев на своем компьютере. Но прилетело именно от антивируса.

    Вроде как всегда, подключился в сеть и вскорости предупреждение от Dr. Web — типа:

    при обновлении произошел сбой, ваши антивирусные базы устарели

    Иметь устаревшего защитника — это в интернет не ходить. Ситуацию требовалось исправить.

    Полез в глобальную сеть за советом. А теперь по порядку о вариантах и что из этого помогло.

    1. Восстановить само приложение.

    Находим наше приложение в меню установленных программ — в Win10 это: «Пуск» ⇒ Параметры ⇒ Система ⇒ Приложения и возможности (для Win7 путь прежний: Панель управления ⇒ Программы ⇒ Программы и компоненты).

    Выделяем строчку с Dr. Web и под ней появится два слова «Изменить» и «Удалить» — жмем первое, а дальше — восстановить.

    Пойдёт процесс проверки целостности компонентов — ждем окончания. При положительном результате можно перезагрузить систему и попробовать обновить антивирус.

    Но увы, способ не помог. Выскакивали разные варианты ошибок и все.

    2. Переустановить приложение.

    Если программа плохо (неправильно) работает, но она необходима, То почему бы не снести её, а потом поставить заново — чистую-шелковистую?

    Дистрибутив имелся, дел на пять минут. Жмем вторую кнопку «Удалить» и удаляем все. Здесь может возникнуть проблема — Доктор не захочет удаляться полностью (или вообще не захочет удаляться).

    У них на оф. сайте (www. drweb. ru) на вкладке «Скачать» есть пункт «Аптечка сисадмина»

    Сгружаем к себе на комп Утилиту удаления Dr. Web (drw_remover), она поможет правильному удалению программы.

    Далее перегружаемся и ставим антивирус по новой.

    И после такой процедуры он всё равно отказывался обновляться.

    3.Загрузить базы и обновиться в ручную.

    Этот метод на отдельный пост. Но если вкратце: загружаем свежую антивирусную базу в отдельную папку и потом из неё обновляемся (без интернета). Это опять таки не помогло.

    4. Убрать ошибки диска + Восстановить само приложение.

    Четвертый способ оказался самым продуктивным. Если выдался сбой программы, то была причина — выявляем таковую при помощи проверки системного диска (Диск C, правая клавиша мыши, Свойства, Сервис, Проверить).

    После проверки вердикт был на лицо — надо перезагрузить систему и исправить ошибки на диске.

    Проверенно на собственном компьютере — если запустить процесс восстановления диска от ошибок, то после процедуры проблемы с программой антивируса могут ни куда не деться.

    Оказывается процессу «починки» мешают пару модулей самой программы — «Превентивная защита» и «Самозащита»

    Именно они прикрывают антивирус от любого «физического изменения» и не дают восстановиться диску после ошибки в полном масштабе.

    Делаем несколько последовательных шагов:

    Вот теперь можно проверить диск и запустить перезагрузкувосстановление от ошибок. Когда процесс завершится, надо проверить — включились ли наши модули на автомате (обязательно).

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

    Коды ошибок Dr. Web

    Dr. Web считается российским разработчиком антивирусных программ, сервисов для предоставления информационных услуг корпоративным, частным пользователям. Кроме того, “Доктор Веб” – популярная антивирусная программа, установка которой нередко сопряжена с неполадками. Ниже представлены популярные коды ошибок Dr. Web и их расшифровка.

    Ошибка 2

    Ошибка dr web 2 свидетельствует о сбое в процессе обновления. Она вызывается несколькими причинами. Чтобы ее исправить, необходимо проверить доступность сети, правильность настроек прокси при их использовании. Если сеть доступна, прокси настроен правильно, необходимо выполнить ряд действий, направленных на восстановление системы с антивирусом. Возможно, проблема исчезнет.

    Устранить проблему можно тремя путями:

    Ошибка 9

    Проблема состоит в невозможности подключения к серверам обновления. Ошибку можно решить двумя способами. В первом случае в антивирусных настройках не написаны параметры серверного прокси или имеются проблемы, связанные с интернет подключением. При применении прокси необходимо:

    Важно! Если прокси не применяется, следует проверить сетевое соединение и при необходимости настроить его.

    Во втором случае код появляется, когда на серверах обновлений нет, однако части серверов обновления нет. Поскольку код 9 говорит об отсутствии свежих обновлений, то никаких действий предпринимать не стоит. Антивирус в назначенный час будет автоматически обновлен.

    Ошибка 10

    Суть проблемы состоит в репозиторие, сбое в скриптах, отсутствии некоторых из них. Решать проблему необходимо, переустановив антивирус. Для решения вопроса, следует скачать с официального сайта антивирусную программу. Удалить предыдущую версию программы, сделать перезагрузку компьютера, далее запустить антивирус и при установке указать путь к файлу. Сделать повторную перезагрузку компьютера.

    Ошибка 11

    Проблема заключается в невозможности обновления антивирусных компонентов. Код 11 высвечивается по ряду причин. Нередко его появление связано с использованием устаревшей антивирусной версии или с повреждением файлов. Если используется устаревшая версия антивируса, необходимо удалить старую и закачать новую программу.

    Если файлы повреждены вследствие проблем с диском, следует исправить все ошибки диска, восстановить антивирусную систему. Восстановление можно провести через следующую пошаговую инструкцию: Пуск, Панель управления, Программы и компоненты, Dr. Web, Изменить, Восстановить. После восстановления, потребуется перезагрузить персональный компьютер, проверить, как работают обновления.

    Ошибка 12

    Суть вопроса в блокировке лицензии. Зачастую она возникает при отсутствии ее активации, активации старой, лицензированной версией, использовании лицензии на другом персональном компьютере. Если не активирована лицензия, необходимо активировать ее через менеджер лицензий. Достаточно удалить заблокированную лицензию и оставить одну действующую.

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

    Ошибка 16

    По этой ошибке установить и работать с антивирусом невозможно из-за действия сторонних программ. Есть несколько основных причин, почему возникает неполадка. В системе могут находиться другие антивирусы или частично установленные файлы. Также в системе могут находиться вредоносные ПО, блокирующие установку антивирусной программы. Необходимо использовать бесплатную утилиту, чтобы очистить персональный компьютер от вирусов, после чего повторить установку.

    Ошибка 32

    32 ошибка Доктор Веб заключается в неполадке установке или восстановлении антивирусной программы. Она появляется, если есть критические повреждения в момент невозможности установки, восстановления продукта по каким-то причинам. Следует загрузить, установить утилиту, после чего перезагрузить персональный компьютер, повторно установить программу.

    Ошибка 33

    Сбой под кодом 33 связан с работой базы данных, невозможности совершения обновления программы из-за повреждения программного обеспечения сервера. В такой ситуации необходимо обратиться в службу поддержки, возможно, базу данных удастся восстановить инженерам.

    Ошибка 110

    110 неполадка связана с неполадкой установки серверных продуктов. Она вызывается разными причинами, поэтому необходимо обратиться в техническую поддержку, приложить отчет, который создан с помощью утилита.

    Ошибка 902

    Суть неполадки состоит в неправильной установке, удалении. Она возникает, если повреждаются антивирусные файлы, не полностью или некорректно был удален старый антивирус.

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

    Ошибка 914

    Коды ошибок Доктор Веб 914 и 910 говорят о том, что произошел сбой компонентов продукта. В такой ситуации необходимо переустановить антивирус.

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

    Ошибка 1066

    Неполадка связана с невозможностью установки антивируса, если есть несовместимое программное обеспечение с утилитой. Зачастую проблема возникает с агента Доктора Веб, если на ПК уже установлен другой антивирусник. Необходимо выполнить его удаление, а позднее – повтор попытки установки Доктора Веб.

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

    Ошибка 1722

    Ошибка связана с установкой, работой антивирусника, проблемой с его сканированием. В такой ситуации следует отправить отчет о неисправной работе программы в техническую поддержку.

    Ошибка 1726

    Ошибка связана с некорректным запуском программы. Причинами служат основные четыре пункта. Неполадка связана с поврежденной загрузкой или неполной установкой программного обеспечения, повреждением реестра Доктор Веб из-за установки или удаления утилиты.

    Может появляться из-за наличия в системы вируса, вредоносного программного обеспечения, повреждения файла Виндовс или удаления файлов утилиты другой программой.

    Ошибка может быть связана с другими факторами, поэтому при совершении всех действий, направленных на решение возникшей проблемы, следует обратиться в техническую поддержку.

    Что можно сделать? Специалисты рекомендуют в такой ситуации восстановить записи реестра, полностью просканировать компьютер на вирусы, очистить ПО от временных файлов, папок и другого мусора. Они советуют также обновить драйверы компьютера, использовать Восстановление Виндовс системы для отмены последних изменений в ПО, переустановить программу заново, запустить проверку системных Виндовс файлов, установить доступные Виндовс обновления и произвести чистую установку Виндовс.

    15) Ошибка 12002

    Суть заключается в неполадке с сетью, неправильной настройке сетевых соединений, неверно выбранных параметров серверного прокси, особенностью настройки сетевого подключения. Специалисты рекомендуют по этой проблеме проверить доступность интернет-сети, настройку брандмауэра, серверного прокси.

    Если раньше не было выполнено этого действия, следует зарегистрировать лицензию, получить ключевой файл. Потом активировать полученный на майл ключевой файл, используя лицензионный менеджер. В случае отсутствия понимания, как убрать код 12002 с компьютера, программисты советуют составлять письмо в техническую поддержку. Желательно при этом прикреплять отчет с выполненными ранее действиями.

    Ошибка 12007

    Неполадка возникает из-за отсутствия доступа к сети, неправильной настройки сетевых соединений, неверных параметров серверного прокси, особенности настройки сетевого подключения на рабочем месте. При возникновении подобной ошибки необходимо проверить доступность интернет-сети, настроек брандмауэра, серверного прокси.

    Важно! Если перечисленные выше действия были проделаны, а неполадка не исправлена, специалисты рекомендуют обратиться в службу технической поддержки. Для того чтобы сотрудники смогли оперативно помочь в ситуации, инженеры рекомендуют заранее делать подробный отчет о проделанных ранее действиях для устранения появляющегося кода при запуске утилиты.

    Ошибка 12029

    Ошибка связана с сетевыми неполадками, неправильной настройкой сетевых соединений, неверными параметрами серверного прокси. Нередко она сопряжена с тем, что пользователю не удается настроить сетевое подключение на рабочем столе. Также часто она связана с ошибкой в модуле обновления. Специалисты рекомендуют в таком случае действовать двумя путями:

    При сохранении ошибки, инженеры рекомендуют сделать переустановку антивируса. В таком случае следует скачать с сайта актуальный антивирусный дистрибутив. Потом удалить Доктор Веб предыдущей версии, используя “Панель управления”, “Установку и удаление программ”. Затем перезагрузить компьютер, скачать, запустить утилиту, перезагрузить компьютер, запустить антивирус и еще раз сделать перезагрузку операционной системы устройства.

    Важно! Если после переустановки ошибка продолжит появляться, следует сделать отчет через DwSysInfo и отправить его специалистам службы техподдержки.

    Ошибка 12152

    Ошибка связи с сервером обозначается кодом 12152. При ее появлении специалисты рекомендуют проверить интернет – соединение, очистить компьютер от вредоносных ПО, почистить ПО от ненужных файлов, сделать переустановку антивирусника, перезагрузить компьютер или написать в службу технической поддержки, прикрепив отчет о проведенных действиях для устранения неполадки. Сотрудники Доктор Веб отвечают быстро и, в основном, помогают решить возникшую сложность быстро.

    В результате, для решения основных проблем, связанных с некорректной работой антивируса Доктор Веб, следует связаться со специалистами службы технической поддержки, сформировав отчет через представленную выше программу. Прежде рекомендуется посмотреть работоспособность сети, проверить ПО на вирусы, ненужные папки и попробовать переустановить антивирус заново.

    Источник: kodyoshibokk.ru

    От комментария на Хабре к уязвимости в антивирусе Dr. Web

    Относительно недавно на хабре появилась статья «Стилер паролей в антивирусном ПО Avira Free Antivirus» от пользователя Veliant. Автор обнаружил, что в стандартной поставке упомянутого антивируса присутствует компонент, который позволяет простым образом извлечь пароли из хранилища браузера Chrome.

    В комментариях произошла дискуссия, можно ли считать это уязвимостью. Но меня зацепил один комментарий автора:

    нельзя ли это было реализовать например в виде DLL, которая при вызове её API проверяла бы цифровую подпись вызывающей программы?

    Дело в том, что буквально перед этим я исследовал несколько программ, которые точно так же полагались на проверку цифровой подписи. И такую проверку было очень легко обойти.

    Цифровая подпись файла соответствует только самому исполняемому файлу, но работающая программа это не только исполняемый файл. Существует несколько способов повлиять на работу программы, не меняя исполняемый файл: можно подменить библиотеки, которые загружаются или сделать инъекцию кода прямо в памяти.

    Я посмотрел на профиль автора: «Работает в: Доктор Веб». А что если посмотреть, не используется ли в продуктах этой компании проверка, о которой говорит автор? Я решил посмотреть и, спойлер, нашел уязвимость, которая позволяет повысить свои привилегии до системных пользователю Dr.Web Security Space для Windows.

    Разведка

    Я не разбираюсь в продуктах Доктор Веб, поэтому взял первое попавшееся, что можно было скачать на сайте — это был Dr.Web Security Space 12 для Windows. При настройках по умолчанию данный продукт проводит проверку обновлений каждые полчаса. И в механизме обновления была обнаружена уязвимость.

    Ниже я предлагаю видео эксплуатации с описанием того, что происходит на видео с привязкой ко времени. Там же будет описание, в чем же конкретно состояла уязвимость.

    Видео эксплуатации

    Демонстрация проходит на ОС Windows 10 x64 от пользователя без прав администратора.
    0:00-0:12 через консоль Windows показываю, что текущий пользователь не является администратором
    0:12-0:24 показываю установленную версию Dr.Web Security Space
    0:24-0:29 в папке на рабочем столе находится файл drweb_eop_upd_dll.dll (исходные коды и файл приложены к тикету)
    0:29-0:34 показываю, что в папке C:ProgramDataDoctor WebUpdateretc находится 3 файла
    0:34-0:47 копирую библиотеку drweb_eop_upd_dll.dll в папке на рабочем столе и один экземпляр называю version.dll, другой — cryptui.dll
    0:47-0:56 копирую файл C:Program FilesCommon FilesDoctor WebUpdaterdrwupsrv.exe в папку на рабочем столе, рядом с dll.
    0:56-1:00 запускаю скопированный файл

    Запускаемый файл drwupsrv.exe из папки на рабочем столе загружает расположенную рядом version.dll. Данная библиотека создает файл C:ProgramDataDoctor WebUpdateretcdrwupsrv.xml.new. На папку C:ProgramData и вглубь у пользователя есть права на создание файлов, поэтому это легальная операция. Если попробовать создать такой файл вручную, то, вероятно, защитные механизмы Dr.Web предотвращают такую операцию.

    Но в эксплуатации создание файла проходит от имени drwupsrv.exe, что вероятно обходит внутренние проверки и файл создается. Фактически, это обход той самой проверки подписи о которой и идет речь в начале статьи.

    1:00-1:22 демонстрирую созданный файл и его содержимое. В общем смысле файл совпадает по содержимому с файлом C:ProgramDataDoctor WebUpdateretcdrwupsrv.xml, но все пути указывают папку на рабочем столе (C:UsersUserDesktopdwtest)
    1:22-2:00 ничего не происходит (на этом этапе я ожидаю процесса обновления ПО, который по умолчанию происходит раз в полчаса и ожидаемое время можно найти в логах)
    2:00-2:14 судя по всему, взяв созданный файл конфигурации, обновлятор видит, что в папке C:UsersUserDesktopdwtest нет файлов ПО Dr.Web, начинает туда файлы ПО копировать.

    Среди копируемых файлов есть файл dwservice.exe, который запускается в момент обновления от имени пользователя NT AUTHORITYSYSTEM. Данный файл загружает в себя библиотеку cryptui.dll, которая была в папке C:UsersUserDesktopdwtest. Код библиотеки просто запускает интерактивную консоль, которую и видно на экране. Командой whoami убеждаюсь, что получены права системы.

    Итог

    Отчет об уязвимости был отправлен в Доктор Веб и, вроде бы, разработчики все поправили.

    15.05.2020 — Обращение в техподдержку с просьбой предоставить security-контакт.
    20.05.2020 — Получаю ответ, что можно передать отчет в данном обращении
    20.05.2020 — Передаю отчет
    14.06.2020 — Получаю ответ, что для 12 версии уязвимость исправлена. Ожидают портирование для версии 11.
    07.07.2020 — Разработчики подтверждают, что исправления выпущены.

    Источник: habr.com

    Nikis0715

    0 / 0 / 0

    Регистрация: 06.10.2020

    Сообщений: 26

    1

    30.01.2021, 17:55. Показов 7596. Ответов 17

    Метки с++ (Все метки)


    Здравствуйте, пишу калькулятор двоичных чисел. Почему-то часто вылезает ошибка -1073740940 и программа не считает. В чем может быть дело?

    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    
    #include <iostream>
    #include <string>
     
    using namespace std;
     
    class Binary {
    public:
        int mem;
        int* bin;
        int dec;
     
        Binary();
        Binary(int dec);
        Binary(int dec, int mem);
        Binary(int* bin, int mem);
        Binary(const Binary& num2);
        ~Binary() {
            delete[]bin;
            bin = nullptr;
        }
        friend Binary operator+(Binary num1, Binary num2);
        friend Binary operator-(Binary num1, Binary num2);
        friend Binary operator*(Binary num1, Binary num2);
        friend void dectobin(int dec, int* bin, int mem);
        friend int bintodec(int* bin, int mem);
        int getmem();
        int getdec();
        int* getbin();
        void printbin();
        void printdec();
    };
     
    void dectobin(int dec, int* bin, int mem) {
        int dec1 = dec;
        for (int i = 0; i < mem; i++) {
     
            bin[i] = dec1 % 2;
            dec1 = (dec1 - bin[i]) / 2;
        }
    }
     
    int bintodec(int* bin, int mem) {
        int dec = 0;
        for (int i = 0; i < mem; i++) {
            dec = dec + bin[i] * (int) pow(2, i);
        }
        return dec;
    }
     
    Binary::Binary() {
        mem = 8;
        dec = 0;
        bin = new int[mem];
        dectobin(dec, bin, mem);
    }
     
    Binary::Binary(int d) {
        dec = d;
        mem = 8;
        if (d >= 0 && d < pow(2, 8)) mem = 8;
        if (d >= pow(2, 8) + 1 && d < pow(2, 16)) mem = 16;
        if (d >= pow(2, 16) + 1 && d < pow(2, 32)) mem = 32;
        bin = new int[mem];
        dectobin(dec, bin, mem);
    }
     
    Binary::Binary(int d, int m) {
        dec = d;
        mem = m;
        bin = new int[mem];
        dectobin(dec, bin, mem);
    }
     
    Binary::Binary(int* b, int m) {
        mem = m;
        bin = new int[mem];
        for (int i = 0; i < mem; i++) {
            bin[i] = b[i];
        }
        dec = bintodec(bin, mem);
    }
     
    Binary::Binary(const Binary& num2) {
        mem = num2.mem;
        dec = num2.dec;
        bin = new int[mem];
        for (int i = 0; i < mem; i++) {
            bin[i] = num2.bin[i];
        }
    }
     
    int Binary::getmem() {
        return this->mem;
    }
     
    int* Binary::getbin() {
        int* bin1 = new int[mem];
        for (int i = 0; i < mem; i++) {
            bin1[i] = bin[i];
        }
        return bin1;
    }
     
    int Binary::getdec() {
        return this->dec;
    }
     
    void Binary::printbin() {
        for (int i = mem - 1; i >= 0; i--) {
            cout << bin[i];
        }
    }
     
    void Binary::printdec() {
        cout << dec;
    }
     
    Binary operator+(Binary num1, Binary num2) {
        int* bin1 = num1.getbin();
        int* bin2 = num2.getbin();
        int mem3 = 8;
        if (num1.getmem() > num2.getmem()) {
            mem3 = num1.getmem();
            int* bin3 = new int[mem3];
            for (int i = 0; i < mem3; i++) {
                bin3[i] = 0;
            }
            for (int i = 0; i < mem3 - 8; i++) {
                bin3[i] += bin1[i] + bin2[i];
                if (bin3[i] > 1) {
                    bin3[i] -= 2;
                    bin3[i + 1] += 1;
                }
            }
            for (int i = mem3 - 8; i < mem3; i++) {
                bin3[i] += bin1[i];
                if (i == mem3 - 1 && bin3[i] == 2) {
                    cout << endl << "Ошибка. Недостаточно выделенной памяти в размере " << mem3 << " бит" << endl;
                    return Binary(0);
                }
                if (bin3[i] > 1) {
                    bin3[i] -= 2;
                    bin3[i + 1] += 1;
                }
            }
            return Binary(bin3, mem3);
        }
     
        if (num1.getmem() == num2.getmem()) {
            mem3 = num1.getmem();
            int* bin3 = new int[mem3];
            for (int i = 0; i < mem3; i++) {
                bin3[i] = 0;
            }
            for (int i = 0; i < mem3; i++) {
                bin3[i] += bin1[i] + bin2[i];
                if (i == mem3 - 1 && bin1[i] + bin2[i] > 1) {
                    cout << endl << "Ошибка. Недостаточно выделенной памяти в размере " << mem3 << " бит" << endl;
                    return Binary(0);
                }
                if (bin3[i] > 1) {
                    bin3[i] -= 2;
                    if (i < mem3 - 1) bin3[i + 1] += 1;
                }
     
            }
            return Binary(bin3, mem3);
        }
     
        if (num1.getmem() < num2.getmem()) {
            mem3 = num2.getmem();
            int* bin3 = new int[mem3];
            for (int i = 0; i < mem3; i++) {
                bin3[i] = 0;
            }
            for (int i = 0; i < mem3 - 8; i++) {
                bin3[i] += bin1[i] + bin2[i];
                if (bin3[i] > 1) {
                    bin3[i] -= 2;
                    bin3[i + 1] += 1;
                }
            }
            for (int i = mem3 - 8; i < mem3; i++) {
                if (i == mem3 - 1 && bin3[i] == 2) {
                    cout << endl << "Ошибка. Недостаточно выделенной памяти в размере " << mem3 << " бит" << endl;
                    return Binary(0);
                }
                if (bin3[i] > 1) {
                    bin3[i] -= 2;
                    bin3[i + 1] += 1;
                }
     
            }
            return Binary(bin3, mem3);
        }
        return Binary(0);
    }
     
    Binary operator-(Binary num1, Binary num2) {
        int* bin1 = num1.getbin();
        int* bin2 = num2.getbin();
     
        int mem3 = 8;
        if (num1.getmem() > num2.getmem()) {
            mem3 = num1.getmem();
            int* bin3 = new int[mem3];
            for (int i = 0; i < mem3 - 8; i++) {
                if (bin1[i] < bin2[i]) {
                    bin1[i + 1] -= 1;
                    bin1[i] += 2;
                    bin3[i] = bin1[i] - bin2[i];
                }
                else bin3[i] = bin1[i] - bin2[i];
            }
            for (int i = mem3 - 8; i < mem3; i++) {
                bin3[i] = bin1[i];
            }
     
            return Binary(bin3, mem3);
        }
     
        if (num1.getmem() < num2.getmem()) {
            mem3 = num1.getmem();
            int* bin3 = new int[mem3];
            for (int i = 0; i < mem3 - 8; i++) {
                if (bin2[i] < bin1[i]) {
                    bin2[i + 1] -= 1;
                    bin2[i] += 2;
                    bin3[i] = bin2[i] - bin1[i];
                }
                else bin3[i] = bin2[i] - bin1[i];
            }
            for (int i = mem3 - 8; i < mem3; i++) {
                bin3[i] = bin2[i];
            }
     
            return Binary(bin3, mem3);
        }
     
        if (num1.getmem() == num2.getmem()) {
            mem3 = num1.getmem();
            int* bin3 = new int[mem3];
            for (int i = 0; i < mem3; i++) {
                if (num1.getdec() > num2.getdec()) {
                    if (bin1[i] < bin2[i]) {
                        bin1[i + 1] -= 1;
                        bin1[i] += 2;
                        bin3[i] = bin1[i] - bin2[i];
                    }
                    else bin3[i] = bin1[i] - bin2[i];
                }
                if (num1.getdec() <= num2.getdec()) {
                    if (bin2[i] < bin1[i]) {
                        bin2[i + 1] -= 1;
                        bin2[i] += 2;
                        bin3[i] = bin2[i] - bin1[i];
                    }
                    else bin3[i] = bin2[i] - bin1[i];
                }
            }
     
            return Binary(bin3, mem3);
        }
        return Binary(0);
    }
     
    Binary operator*(Binary num1, Binary num2) {
        int* bin1 = num1.getbin();
        int* bin2 = num2.getbin();
        int mem3 = 8;
        int mem1 = num1.getmem();
        int mem2 = num2.getmem();
        int d1 = num1.getdec();
        int d2 = num2.getdec();
        int d = d1 * d2;
        if (d >= 0 && d < pow(2, 8)) mem3 = 8;
        if (d >= pow(2, 8) + 1 && d < pow(2, 16)) mem3 = 16;
        if (d >= pow(2, 16) + 1 && d < pow(2, 32)) mem3 = 32;
        if (d > pow(2, 32)) {
            cout << "Максимального размера выделяемой памяти недостаточно для получения ответа. Операция прервана";
            return Binary(0);
        }
        int* bin3 = new int[mem3];
        for (int i = 0; i < mem3; i++) {
            bin3[i] = 0;
        }
     
        for (int i = 0; i < mem1; i++) {
            for (int j = 0; j < mem2; j++) {
                bin3[i + j] += bin1[i] * bin2[j];
                if (bin3[i + j] > 1) {
                    bin3[i + j] -= 2;
                    bin3[i + j + 1] += 1;
                }
            }
        }
     
        return Binary(bin3, mem3);
    }
     
    int main() {
        setlocale(LC_ALL, "Rus");
        int otv(1);
        //while (otv == 1) {
            int d1(0), d2(0), count(0);
            char zn1('+'), zn2('+'), zn3('+'); //переменные для хранения знаков. Знак 2 определяем действие между числами. Знаки 1 и 3 - знаки чисел
            string v;//строка, для считывания выражения
            string D1, D2; //строки, в которые запишем числа
            cout << "Введите выражение" << endl;
            getline(cin, v); //считываем введенное выражение в строку
            int length = v.length(); // определяем длину строки
            /////////////////////////////////////////////
            //1 ЭТАП: ОПРЕДЕЛЕНИЕ ЗНАКОВ В ВЫРАЖЕНИИ//
            count = 0; //зануляем счетчик кол-ва знаков в строке
            for (int i = 0; i < length; i++) {
                if (v[i] == '-' || v[i] == '+' || v[i] == '*') count++; //узнаем кол-во знаков в строке
            }
     
            int* pointer = new int[3];//в этот массив сохраним номера позиций знаков, чтобы разграничить и считать числа
            for (int i = 0; i < 3; i++) {
                pointer[i] = 0;
            }
            if (count == 1) { // если в строке только 1 знак
                zn1 = '+';
                zn3 = '+'; // то 1 и 3 знак - это +
                for (int i = 0; i < length; i++) {
                    if (v[i] == '-' || v[i] == '+' || v[i] == '*') {
                        zn2 = v[i]; //определяем знак 2
                        pointer[0] = i;
                    }
                }
                D1.assign(v, 0, pointer[0]);//сохраняем первое число в строку
                d1 = atoi(D1.c_str());//переводим строку в число
                D2.assign(v, pointer[0] + 1, length - pointer[0]);//по аналогии
                d2 = atoi(D2.c_str());
            }
     
     
            if (count == 2) { //если в строке  2 знака, то
                if (v[0] == '-') {// если первый знак -, то далее ищем второй знак
                    zn1 = '-';
                    for (int i = 0; i < length; i++) {
                        if (v[i] == '-' || v[i] == '+' || v[i] == '*') {
                            zn2 = v[i];
                            pointer[0] = i;
                        }
                    }
                    zn3 = '+';
                    D1.assign(v, 1, pointer[0] - 1);//сохраняем первое число в строку
                    d1 = atoi(D1.c_str());//переводим строку в число
                    D2.assign(v, pointer[0] + 1, length - pointer[0]);//по аналогии
                    d2 = atoi(D2.c_str());
                }
                else { //иначе 
                    count = 0; //зануляем счетчик кол-ва знаков
                    for (int i = 0; i < length; i++) {
                        if (v[i] == '-' || v[i] == '+' || v[i] == '*') {
                            if (count == 1) {
                                zn3 = v[i];
                                count++;
                                pointer[1] = i;
                            }
                            if (count == 0) {
                                zn2 = v[i];
                                count++;
                                pointer[0] = i;
                            }
                        }
                    }
                    D1.assign(v, 0, pointer[0]);//сохраняем первое число в строку
                    d1 = atoi(D1.c_str());//переводим строку в число
                    D2.assign(v, pointer[1] + 1, length - pointer[1]);//по аналогии
                    d2 = atoi(D2.c_str());
                }
            }
     
     
            if (count == 3) {//если в строке 3 знака, то сохраняем знаки поочередно 
                for (int i = 0; i < length; i++) {
                    if (v[i] == '-' || v[i] == '+' || v[i] == '*') {
                        if (count == 2) {
                            zn3 = v[i];
                            count++;
                            pointer[2] = i;
                        }
                        if (count == 1) {
                            zn2 = v[i];
                            count++;
                            pointer[1] = i;
                        }
                        if (count == 0) {
                            zn1 = v[i];
                            count++;
                            pointer[0] = i;
                        }
                    }
                }
                D1.assign(v, pointer[0] + 1, pointer[1] - pointer[0] - 1);//сохраняем первое число в строку
                d1 = atoi(D1.c_str());//переводим строку в число
                D2.assign(v, pointer[2] + 1, length - pointer[2]);//по аналогии
                d2 = atoi(D2.c_str());
            }
            /////////////////////
            //2 ЭТАП. ВЫЧИСЛЕНИЕ ВЫРАЖЕНИЯ//
            if (count == 1) {
                Binary bin1(d1), bin2(d2);
                Binary bin3(bin1 + bin2), bin4(bin1 - bin2), bin5(bin1 * bin2), bin6(bin2 - bin1);
                switch (zn2)
                {
                case '+':
                    bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = "; bin3.printbin(); cout << endl;
                    bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = "; bin3.printdec(); cout << endl;
                    break;
                case '-':
                    if (bin1.getdec() < bin2.getdec()) {
                        bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; bin6.printbin(); cout << endl;
                        bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; bin6.printdec(); cout << endl;
                        break;
                    }
                    bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = "; bin4.printbin(); cout << endl;
                    bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = "; bin4.printdec(); cout << endl;
                    break;
                case '*':
                    bin1.printbin(); cout << " * "; bin2.printbin(); cout << " = "; bin5.printbin(); cout << endl;
                    bin1.printdec(); cout << " * "; bin2.printdec(); cout << " = "; bin5.printdec(); cout << endl;
                    break;
                default: cout << "Введен неверный знак. Попробуйте еще раз" << endl;
                    break;
                }
            }
            else {
                Binary bin1(d1), bin2(d2);
                Binary bin3(bin1 + bin2), bin4(bin1 - bin2), bin5(bin1 * bin2), bin6(bin2 - bin1);
                switch (zn2)
                {
                case '+':
                    if (zn1 == '+' && zn3 == '+') {
                        bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = "; bin3.printbin(); cout << endl;
                        bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = "; bin3.printdec(); cout << endl;
                        break;
                    }
                    if (zn1 == '-' && zn3 == '+') {
                        if (bin1.getdec() <= bin2.getdec()) {
                            cout << "-"; bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = "; bin6.printbin(); cout << endl;
                            cout << "-"; bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = "; bin6.printdec(); cout << endl;
                            break;
                        }
                        else {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; bin4.printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; bin4.printdec(); cout << endl;
                            break;
                        }
                    }
                    if (zn1 == '+' && zn3 == '-') {
                        if (bin1.getdec() < bin2.getdec()) {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; bin6.printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; bin6.printdec(); cout << endl;
                            break;
                        }
                        else {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; bin4.printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; bin4.printdec(); cout << endl;
                            break;
                        }
                    }
                case '-':
                    if (zn1 == '+' && zn3 == '+') {
                        if (bin1.getdec() < bin2.getdec()) {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; bin6.printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; bin6.printdec(); cout << endl;
                            break;
                        }
                        else {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; bin4.printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; bin4.printdec(); cout << endl;
                            break;
                        }
                    }
                    if (zn1 == '-' && zn3 == '+') {
                            cout << "-"; bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; bin3.printbin(); cout << endl;
                            cout << "-"; bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; bin3.printdec(); cout << endl;
                            break;
                    }
                    if (zn1 == '+' && zn3 == '-') {
                            bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = "; bin3.printbin(); cout << endl;
                            bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = "; bin3.printdec(); cout << endl;
                            break;
                    }
                case '*':
                    if (zn1 == '+' && zn3 == '+') {
                        bin1.printbin(); cout << " * "; bin2.printbin(); cout << " = "; bin5.printbin(); cout << endl;
                        bin1.printdec(); cout << " * "; bin2.printdec(); cout << " = "; bin5.printdec(); cout << endl;
                        break;
                    }
                    if (zn1 == '-' && zn3 == '+') {
                        cout << "-"; bin1.printbin(); cout << " * "; bin2.printbin(); cout << " = -"; bin5.printbin(); cout << endl;
                        cout << "-"; bin1.printdec(); cout << " * "; bin2.printdec(); cout << " = -"; bin5.printdec(); cout << endl;
                        break;
                    }
                    if (zn1 == '+' && zn3 == '-') {
                        bin1.printbin(); cout << " * (-"; bin2.printbin(); cout << ") = -"; bin5.printbin(); cout << endl;
                        bin1.printdec(); cout << " * (-"; bin2.printdec(); cout << ") = -"; bin5.printdec(); cout << endl;
                        break;
                    }
                    if (zn1 == '-' && zn3 == '-') {
                        bin1.printbin(); cout << " * "; bin2.printbin(); cout << " = "; bin5.printbin(); cout << endl;
                        bin1.printdec(); cout << " * "; bin2.printdec(); cout << " = "; bin5.printdec(); cout << endl;
                        break;
                    }
                default: cout << "Введен неверный знак. Попробуйте еще раз" << endl;
                    break;
                }
            }
            /*cout << "Если хотите продолжить, введите 1" << endl;
            cin >> otv;
            cout << endl;*/
            
        //}
        return 0;
    }

    __________________
    Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



    0



    1270 / 1027 / 470

    Регистрация: 25.12.2016

    Сообщений: 3,333

    30.01.2021, 19:10

    2

    В отладчике программу запускали?

    Добавлено через 6 секунд
    На каких входных данных возникает ошибка?



    0



    0 / 0 / 0

    Регистрация: 06.10.2020

    Сообщений: 26

    30.01.2021, 19:21

     [ТС]

    3

    На сложениях чисел с одинаковым и разным количеством выделяемой памяти.

    Отладчик выдает: wntdll.pdb содержит отладочную информацию, необходимую для поиска исходного кода для модуля ntdll.dll



    0



    1270 / 1027 / 470

    Регистрация: 25.12.2016

    Сообщений: 3,333

    30.01.2021, 19:27

    4

    Цитата
    Сообщение от Nikis0715
    Посмотреть сообщение

    На сложениях чисел с одинаковым и разным количеством выделяемой памяти.

    Приведите конкретные числа.



    0



    0 / 0 / 0

    Регистрация: 06.10.2020

    Сообщений: 26

    30.01.2021, 21:11

     [ТС]

    5

    260 и 2



    0



    1270 / 1027 / 470

    Регистрация: 25.12.2016

    Сообщений: 3,333

    30.01.2021, 21:37

    6

    Цитата
    Сообщение от Nikis0715
    Посмотреть сообщение

    260 и 2

    У меня работает без ошибок (ввожу 260 + 2).

    Цитата
    Сообщение от Nikis0715
    Посмотреть сообщение

    Отладчик выдает: wntdll.pdb содержит отладочную информацию, необходимую для поиска исходного кода для модуля ntdll.dll

    Ну выдаёт и выдаёт — пусть так.
    Вопрос в том работает отладка или нет? Программу можно выполнить «по шагам»?



    0



    0 / 0 / 0

    Регистрация: 06.10.2020

    Сообщений: 26

    30.01.2021, 21:41

     [ТС]

    7

    Я только скопировал код и создал новый проект и все заработало. Не знаю, в чем была проблема. Новый проект все решил



    0



    1270 / 1027 / 470

    Регистрация: 25.12.2016

    Сообщений: 3,333

    30.01.2021, 21:43

    8

    Цитата
    Сообщение от Nikis0715
    Посмотреть сообщение

    Новый проект все решил

    Так бывает.



    1



    TheCalligrapher

    Вездепух

    Эксперт CЭксперт С++

    10435 / 5704 / 1553

    Регистрация: 18.10.2014

    Сообщений: 14,098

    30.01.2021, 22:03

    9

    Цитата
    Сообщение от Nikis0715
    Посмотреть сообщение

    Почему-то часто вылезает ошибка

    Ну так а чем вас не устроила первая очевидная причина: Распространенные ошибки

    Цитата
    Сообщение от Nikis0715
    Посмотреть сообщение

    260 и 2

    Что такое «260 и 2»? Ваша программа поддерживает операцию «и»?

    Цитата
    Сообщение от Nikis0715
    Посмотреть сообщение

    Новый проект все решил

    Нет, не нужно выдумывать. Ничего он не решил. Программа действительно падает.

    В operator * написана какая-то чушь при вычислении размера памяти mem3. В результате происходит вылет за пределы выделенной памяти и разрушение кучи. Отсюда и падение.

    Точнее сказать, памяти этой хватило бы, если бы цикл бинарного умножения был написан грамотно. Но цикл бинарного умножения ведет себя «нагло»

    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
        for (int i = 0; i < mem1; i++) {
            for (int j = 0; j < mem2; j++) {
                bin3[i + j] += bin1[i] * bin2[j];
                if (bin3[i + j] > 1) {
                    bin3[i + j] -= 2;
                    bin3[i + j + 1] += 1;
                }
            }
        }

    Вот этот цикл разрушает память.

    Отдельно хотелось бы обратить внимание на такое

    C++
    1
    2
    3
    4
    
        if (d > pow(2, 32)) {
            cout << "Максимального размера выделяемой памяти недостаточно для получения ответа. Операция прервана";
            return Binary(0);
        }

    при int d. Это какого же размера у вас int, если он может быть больше чем 2 в 32 степени? Что за платформа?

    И почему вообще у вас в программе используется функция pow? Откуда возникла такая идея?

    Цитата
    Сообщение от Nikis0715
    Посмотреть сообщение

    пишу калькулятор двоичных чисел.

    Непонятно, почему ваш «калькулятор двоичных чисел» параллельно делает вычисления во внутреннем формате и в вашем двоичном формате. Зачем вы писали двоичное умножение, если вы все равно в реализации operator * делаете обычное умножение int d = d1 * d2;? Какой смысл «писать калькулятор двоичных чисел», если вы все равно повторяете вычисления обычным образом???



    1



    Nikis0715

    0 / 0 / 0

    Регистрация: 06.10.2020

    Сообщений: 26

    30.01.2021, 22:15

     [ТС]

    10

    В фото требования к программе.

    С умножением проблем нет. Проблемы с вычитанием и сложением 300 и 100, например. То есть, для одного выделяется массив с 16 элементами, а для другого — с 8.

    Я убрал конструктор по умолчанию, и программа перестала падать.

    C++ (Qt)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    
    #include <iostream>
    #include <string>
     
    using namespace std;
     
    class Binary {
    public:
        int mem;
        int* bin;
        int dec;
     
        //Binary();
        Binary(int dec);
        Binary(int dec, int mem);
        Binary(int* bin, int mem);
        Binary(const Binary& num2);
        ~Binary() {
            delete[]bin;
        }
        friend Binary operator+(Binary num1, Binary num2);
        friend Binary operator-(Binary num1, Binary num2);
        friend Binary operator*(Binary num1, Binary num2);
        friend void dectobin(int dec, int* bin, int mem);
        friend int bintodec(int* bin, int mem);
        int getmem();
        int getdec();
        int* getbin();
        void printbin();
        void printdec();
    };
     
    void dectobin(int dec, int* bin, int mem) {
        int dec1 = dec;
        for (int i = 0; i < mem; i++) {
     
            bin[i] = dec1 % 2;
            dec1 = (dec1 - bin[i]) / 2;
        }
    }
     
    int bintodec(int* bin, int mem) {
        int dec = 0;
        for (int i = 0; i < mem; i++) {
            dec = dec + bin[i] * (int)pow(2, i);
        }
        return dec;
    }
    /*
    Binary::Binary() {
        mem = 8;
        dec = 0;
        bin = new int[mem];
        dectobin(dec, bin, mem);
    }
    */
    Binary::Binary(int d) {
        dec = d;
        mem = 8;
        if (d >= 0 && d < pow(2, 8)) mem = 8;
        if (d >= pow(2, 8) && d < pow(2, 16)) mem = 16;
        if (d >= pow(2, 16) && d < pow(2, 32)) mem = 32;
        bin = new int[mem];
        dectobin(dec, bin, mem);
    }
     
    Binary::Binary(int d, int m) {
        dec = d;
        mem = m;
        bin = new int[mem];
        dectobin(dec, bin, mem);
    }
     
    Binary::Binary(int* b, int m) {
        mem = m;
        bin = new int[mem];
        for (int i = 0; i < mem; i++) {
            bin[i] = b[i];
        }
        dec = bintodec(bin, mem);
    }
     
    Binary::Binary(const Binary& num2) {
        mem = num2.mem;
        dec = num2.dec;
        bin = new int[mem];
        for (int i = 0; i < mem; i++) {
            bin[i] = num2.bin[i];
        }
    }
     
    int Binary::getmem() {
        return this->mem;
    }
     
    int* Binary::getbin() {
        return bin;
    }
     
    int Binary::getdec() {
        return this->dec;
    }
     
    void Binary::printbin() {
        for (int i = mem - 1; i >= 0; i--) {
            cout << bin[i];
        }
    }
     
    void Binary::printdec() {
        cout << dec;
    }
     
    Binary operator+(Binary num1, Binary num2) {
        int* bin1 = num1.getbin();
        int* bin2 = num2.getbin();
        int mem3;
        if (num1.getmem() > num2.getmem()) {
            mem3 = num1.getmem();
            int* bin3 = new int[mem3];
            for (int i = 0; i < mem3; i++) {
                bin3[i] = 0;
            }
            for (int i = 0; i < mem3 - 8; i++) {
                bin3[i] += bin1[i] + bin2[i];
                if (bin3[i] > 1) {
                    bin3[i] -= 2;
                    bin3[i + 1] += 1;
                }
            }
            for (int i = mem3 - 8; i < mem3; i++) {
                bin3[i] += bin1[i];
                if (i == mem3 - 1 && bin3[i] > 1) {
                    cout << endl << "Ошибка. Недостаточно выделенной памяти в размере " << mem3 << " бит" << endl;
                    return Binary(0);
                }
                if (bin3[i] > 1) {
                    bin3[i] -= 2;
                    bin3[i + 1] += 1;
                }
            }
            return Binary(bin3, mem3);
        }
     
        if (num1.getmem() == num2.getmem()) {
            mem3 = num1.getmem();
            int* bin3 = new int[mem3];
            for (int i = 0; i < mem3; i++) {
                bin3[i] = 0;
            }
            for (int i = 0; i < mem3; i++) {
                bin3[i] += bin1[i] + bin2[i];
                if (i == mem3 - 1 && bin3[i] > 1) {
                    cout << endl << "Ошибка. Недостаточно выделенной памяти в размере " << mem3 << " бит" << endl;
                    return Binary(0);
                }
                if (bin3[i] > 1) {
                    bin3[i] -= 2;
                    if (i < mem3 - 1) bin3[i + 1] += 1;
                }
     
            }
            return Binary(bin3, mem3);
        }
     
        if (num1.getmem() < num2.getmem()) {
            mem3 = num2.getmem();
            int* bin3 = new int[mem3];
            for (int i = 0; i < mem3; i++) {
                bin3[i] = 0;
            }
            for (int i = 0; i < mem3 - 8; i++) {
                bin3[i] += bin1[i] + bin2[i];
                if (bin3[i] > 1) {
                    bin3[i] -= 2;
                    bin3[i + 1] += 1;
                }
            }
            for (int i = mem3 - 8; i < mem3; i++) {
                bin3[i] += bin2[i];
                if (i == mem3 - 1 && bin3[i] == 2) {
                    cout << endl << "Ошибка. Недостаточно выделенной памяти в размере " << mem3 << " бит" << endl;
                    return Binary(0);
                }
                if (bin3[i] > 1) {
                    bin3[i] -= 2;
                    bin3[i + 1] += 1;
                }
     
            }
            return Binary(bin3, mem3);
        }
        return Binary(0);
    }
     
    Binary operator-(Binary num1, Binary num2) {
        int* bin1 = num1.getbin();
        int* bin2 = num2.getbin();
     
        int mem3 = 8;
        if (num1.getmem() > num2.getmem()) {
            mem3 = num1.getmem();
            int* bin3 = new int[mem3];
            for (int i = 0; i < mem3 - 8; i++) {
                if (bin1[i] < bin2[i]) {
                    bin1[i + 1] -= 1;
                    bin1[i] += 2;
                    bin3[i] = bin1[i] - bin2[i];
                }
                else bin3[i] = bin1[i] - bin2[i];
            }
            for (int i = mem3 - 8; i < mem3; i++) {
                bin3[i] = bin1[i];
            }
     
            return Binary(bin3, mem3);
        }
     
        if (num1.getmem() < num2.getmem()) {
            mem3 = num1.getmem();
            int* bin3 = new int[mem3];
            for (int i = 0; i < mem3 - 8; i++) {
                if (bin2[i] < bin1[i]) {
                    bin2[i + 1] -= 1;
                    bin2[i] += 2;
                    bin3[i] = bin2[i] - bin1[i];
                }
                else bin3[i] = bin2[i] - bin1[i];
            }
            for (int i = mem3 - 8; i < mem3; i++) {
                bin3[i] = bin2[i];
            }
     
            return Binary(bin3, mem3);
        }
     
        if (num1.getmem() == num2.getmem()) {
            mem3 = num1.getmem();
            int* bin3 = new int[mem3];
            for (int i = 0; i < mem3; i++) {
                if (num1.getdec() > num2.getdec()) {
                    if (bin1[i] < bin2[i]) {
                        bin1[i + 1] -= 1;
                        bin1[i] += 2;
                        bin3[i] = bin1[i] - bin2[i];
                    }
                    else bin3[i] = bin1[i] - bin2[i];
                }
                if (num1.getdec() <= num2.getdec()) {
                    if (bin2[i] < bin1[i]) {
                        bin2[i + 1] -= 1;
                        bin2[i] += 2;
                        bin3[i] = bin2[i] - bin1[i];
                    }
                    else bin3[i] = bin2[i] - bin1[i];
                }
            }
     
            return Binary(bin3, mem3);
        }
        return Binary(0);
    }
     
    Binary operator*(Binary num1, Binary num2) {
        int* bin1 = num1.getbin();
        int* bin2 = num2.getbin();
        int mem3 = 8;
        int mem1 = num1.getmem();
        int mem2 = num2.getmem();
        int d1 = num1.getdec();
        int d2 = num2.getdec();
        int d = d1 * d2;
        if (d >= 0 && d < pow(2, 8)) mem3 = 8;
        if (d >= pow(2, 8) + 1 && d < pow(2, 16)) mem3 = 16;
        if (d >= pow(2, 16) + 1 && d < pow(2, 32)) mem3 = 32;
        if (d > pow(2, 32)) {
            cout << "Максимального размера выделяемой памяти недостаточно для получения ответа. Операция прервана";
            return Binary(0);
        }
        int* bin3 = new int[mem3];
        for (int i = 0; i < mem3; i++) {
            bin3[i] = 0;
        }
     
        for (int i = 0; i < mem1; i++) {
            for (int j = 0; j < mem2; j++) {
                bin3[i + j] += bin1[i] * bin2[j];
                if (bin3[i + j] > 1) {
                    bin3[i + j] -= 2;
                    bin3[i + j + 1] += 1;
                }
            }
        }
     
        return Binary(bin3, mem3);
    }
     
    void main() {
        setlocale(LC_ALL, "Ru");
        int otv(1);
        int d1(0), d2(0), count(0);
        char zn1('+'), zn2('+'), zn3('+'); //переменные для хранения знаков. Знак 2 определяем действие между числами. Знаки 1 и 3 - знаки чисел
        string v;//строка, для считывания выражения
        string D1, D2; //строки, в которые запишем числа
        //while (otv == 1) {
            cout << "Введите выражение" << endl;
            getline(cin, v); //считываем введенное выражение в строку
            int length = v.length(); // определяем длину строки
            /////////////////////////////////////////////
            //1 ЭТАП: ОПРЕДЕЛЕНИЕ ЗНАКОВ В ВЫРАЖЕНИИ//
            count = 0; //зануляем счетчик кол-ва знаков в строке
            for (int i = 0; i < length; i++) {
                if (v[i] == '-' || v[i] == '+' || v[i] == '*') count++; //узнаем кол-во знаков в строке
            }
     
            int* pointer = new int[3];//в этот массив сохраним номера позиций знаков, чтобы разграничить и считать числа
            for (int i = 0; i < 3; i++) {
                pointer[i] = 0;
            }
            if (count == 1) { // если в строке только 1 знак
                zn1 = '+';
                zn3 = '+'; // то 1 и 3 знак - это +
                for (int i = 0; i < length; i++) {
                    if (v[i] == '-' || v[i] == '+' || v[i] == '*') {
                        zn2 = v[i]; //определяем знак 2
                        pointer[0] = i;
                    }
                }
                D1.assign(v, 0, pointer[0]);//сохраняем первое число в строку
                d1 = atoi(D1.c_str());//переводим строку в число
                D2.assign(v, pointer[0] + 1, length - pointer[0]);//по аналогии
                d2 = atoi(D2.c_str());
            }
     
     
            if (count == 2) { //если в строке  2 знака, то
                count = 0;
                if (v[0] == '-') {// если первый знак -, то далее ищем второй знак
                    zn1 = '-';
                    for (int i = 0; i < length; i++) {
                        if (v[i] == '-' || v[i] == '+' || v[i] == '*') {
                            zn2 = v[i];
                            pointer[0] = i;
                        }
                    }
                    zn3 = '+';
                    D1.assign(v, 1, pointer[0] - 1);//сохраняем первое число в строку
                    d1 = atoi(D1.c_str());//переводим строку в число
                    D2.assign(v, pointer[0] + 1, length - pointer[0]);//по аналогии
                    d2 = atoi(D2.c_str());
                }
                else { //иначе 
                    count = 0; //зануляем счетчик кол-ва знаков
                    for (int i = 0; i < length; i++) {
                        if (v[i] == '-' || v[i] == '+' || v[i] == '*') {
                            if (count == 1) {
                                zn3 = v[i];
                                count++;
                                pointer[1] = i;
                            }
                            if (count == 0) {
                                zn2 = v[i];
                                count++;
                                pointer[0] = i;
                            }
                        }
                    }
                    D1.assign(v, 0, pointer[0]);//сохраняем первое число в строку
                    d1 = atoi(D1.c_str());//переводим строку в число
                    D2.assign(v, pointer[1] + 1, length - pointer[1]);//по аналогии
                    d2 = atoi(D2.c_str());
                }
                count = 2;
            }
     
     
            if (count == 3) {//если в строке 3 знака, то сохраняем знаки поочередно 
                count = 0;
                for (int i = 0; i < length; i++) {
                    if (v[i] == '-' || v[i] == '+' || v[i] == '*') {
                        if (count == 2) {
                            zn3 = v[i];
                            count++;
                            pointer[2] = i;
                        }
                        if (count == 1) {
                            zn2 = v[i];
                            count++;
                            pointer[1] = i;
                        }
                        if (count == 0) {
                            zn1 = v[i];
                            count++;
                            pointer[0] = i;
                        }
                    }
                }
                D1.assign(v, pointer[0] + 1, pointer[1] - pointer[0] - 1);//сохраняем первое число в строку
                d1 = atoi(D1.c_str());//переводим строку в число
                D2.assign(v, pointer[2] + 1, length - pointer[2]);//по аналогии
                d2 = atoi(D2.c_str());
                count = 3;
            }
            /////////////////////
            //2 ЭТАП. ВЫЧИСЛЕНИЕ ВЫРАЖЕНИЯ//
            if (count == 1) {
                Binary bin1(d1), bin2(d2);
                Binary bin3(bin1 + bin2), bin4(bin1 - bin2), bin5(bin1 * bin2), bin6(bin2 - bin1);
                switch (zn2)
                {
                case '+':
                    bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = "; bin3.printbin(); cout << endl;
                    bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = "; bin3.printdec(); cout << endl;
                    break;
                case '-':
                    if (bin1.getdec() < bin2.getdec()) {
                        bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; bin6.printbin(); cout << endl;
                        bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; bin6.printdec(); cout << endl;
                        break;
                    }
                    else {
                        bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = "; bin4.printbin(); cout << endl;
                        bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = "; bin4.printdec(); cout << endl;
                        break;
                    }
                case '*':
                    bin1.printbin(); cout << " * "; bin2.printbin(); cout << " = "; bin5.printbin(); cout << endl;
                    bin1.printdec(); cout << " * "; bin2.printdec(); cout << " = "; bin5.printdec(); cout << endl;
                    break;
                default: cout << "Введен неверный знак. Попробуйте еще раз" << endl;
                    break;
                }
            }
            else {
                Binary bin1(d1), bin2(d2);
                Binary bin3(bin1 + bin2), bin4(bin1 - bin2), bin5(bin1 * bin2), bin6(bin2 - bin1);
                switch (zn2)
                {
                case '+':
                    if (zn1 == '+' && zn3 == '+') {
                        bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = "; bin3.printbin(); cout << endl;
                        bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = "; bin3.printdec(); cout << endl;
                        break;
                    }
                    if (zn1 == '-' && zn3 == '+') {
                        if (bin1.getdec() <= bin2.getdec()) {
                            cout << "-"; bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = "; bin6.printbin(); cout << endl;
                            cout << "-"; bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = "; bin6.printdec(); cout << endl;
                            break;
                        }
                        else {
                            cout << "-"; bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = -"; bin4.printbin(); cout << endl;
                            cout << "-"; bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = -"; bin4.printdec(); cout << endl;
                            break;
                        }
                    }
                    if (zn1 == '+' && zn3 == '-') {
                        if (bin1.getdec() < bin2.getdec()) {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; bin6.printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; bin6.printdec(); cout << endl;
                            break;
                        }
                        else {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = "; bin4.printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = "; bin4.printdec(); cout << endl;
                            break;
                        }
                    }
                    if (zn1 == '-' && zn3 == '-') {
                        cout << '-'; bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; bin3.printbin(); cout << endl;
                        cout << '-'; bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; bin3.printdec(); cout << endl;
                        break;
                    }
                case '-':
                    if (zn1 == '+' && zn3 == '+') {
                        if (bin1.getdec() < bin2.getdec()) {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; bin6.printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; bin6.printdec(); cout << endl;
                            break;
                        }
                        else {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = "; bin4.printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = "; bin4.printdec(); cout << endl;
                            break;
                        }
                    }
                    if (zn1 == '-' && zn3 == '+') {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; bin3.printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; bin3.printdec(); cout << endl;
                            break;
                            }
                    if (zn1 == '+' && zn3 == '-') {
                        bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = "; bin3.printbin(); cout << endl;
                        bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = "; bin3.printdec(); cout << endl;
                        break;
                    }
                    if (zn1 == '-' && zn3 == '-') {
                        if (bin1.getdec() <= bin2.getdec()) {
                            cout << "-"; bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = "; bin6.printbin(); cout << endl;
                            cout << "-"; bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = "; bin6.printdec(); cout << endl;
                            break;
                        }
                        else {
                            cout << "-"; bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = -"; bin4.printbin(); cout << endl;
                            cout << "-"; bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = -"; bin4.printdec(); cout << endl;
                            break;
                        }
                    }
                case '*':
                    if (zn1 == '+' && zn3 == '+') {
                        bin1.printbin(); cout << " * "; bin2.printbin(); cout << " = "; bin5.printbin(); cout << endl;
                        bin1.printdec(); cout << " * "; bin2.printdec(); cout << " = "; bin5.printdec(); cout << endl;
                        break;
                    }
                    if (zn1 == '-' && zn3 == '+') {
                        cout << "-"; bin1.printbin(); cout << " * "; bin2.printbin(); cout << " = -"; bin5.printbin(); cout << endl;
                        cout << "-"; bin1.printdec(); cout << " * "; bin2.printdec(); cout << " = -"; bin5.printdec(); cout << endl;
                        break;
                    }
                    if (zn1 == '+' && zn3 == '-') {
                        bin1.printbin(); cout << " * (-"; bin2.printbin(); cout << ") = -"; bin5.printbin(); cout << endl;
                        bin1.printdec(); cout << " * (-"; bin2.printdec(); cout << ") = -"; bin5.printdec(); cout << endl;
                        break;
                    }
                    if (zn1 == '-' && zn3 == '-') {
                        bin1.printbin(); cout << " * "; bin2.printbin(); cout << " = "; bin5.printbin(); cout << endl;
                        bin1.printdec(); cout << " * "; bin2.printdec(); cout << " = "; bin5.printdec(); cout << endl;
                        break;
                    }
                default: cout << "Введен неверный знак. Попробуйте еще раз" << endl;
                    break;
                }
            }
            otv = 1;
        //}
     
    }

    Миниатюры

    Программа завершила работу с кодом -1073740940
     



    0



    Вездепух

    Эксперт CЭксперт С++

    10435 / 5704 / 1553

    Регистрация: 18.10.2014

    Сообщений: 14,098

    30.01.2021, 22:35

    11

    Цитата
    Сообщение от Nikis0715
    Посмотреть сообщение

    С умножением проблем нет.

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

    Что там у вас творится в остальных функциях я даже не смотрел, т.е. программа всегда уверенно падает на умножении.

    Цитата
    Сообщение от Nikis0715
    Посмотреть сообщение

    В фото требования к программе.

    И каким же из этих требований соответствует ввод «260 и 2»?



    0



    0 / 0 / 0

    Регистрация: 06.10.2020

    Сообщений: 26

    30.01.2021, 22:44

     [ТС]

    12

    Попробуйте ввести 260+2. Программа падает.

    А что не так с циклом умножения?



    0



    TheCalligrapher

    Вездепух

    Эксперт CЭксперт С++

    10435 / 5704 / 1553

    Регистрация: 18.10.2014

    Сообщений: 14,098

    30.01.2021, 22:58

    13

    Цитата
    Сообщение от Nikis0715
    Посмотреть сообщение

    Попробуйте ввести 260+2. Программа падает.

    Верно. Именно это я и вводил. И ваша программа падает именно на умножении.

    Цитата
    Сообщение от Nikis0715
    Посмотреть сообщение

    А что не так с циклом умножения?

    Я же написал уже выше.

    Ваша программа вычислит d = 520 и решит, что для этого хватит 16 двоичных ячеек. То есть mem3 = 16 и размер массива bin3 равен 16.

    А затем ваша программа запустит вышеупомянутые циклы двоичного умножения, в которых mem1 = 16 (это 260) и mem2 = 8 (это 2). В результате сумма i+j в

    C++
    1
    2
    3
    4
    
        for (int i = 0; i < mem1; i++) {
            for (int j = 0; j < mem2; j++) {
                bin3[i + j] += bin1[i] * bin2[j];
                ...

    запросто будет доходить до 22, то есть превышать 16. То есть будет происходить вылет за пределы массива bin3, разрушение памяти и падение.

    Добавлено через 2 минуты

    Цитата
    Сообщение от Nikis0715
    Посмотреть сообщение

    Я убрал конструктор по умолчанию, и программа перестала падать.

    Это бессмысленные танцы с бубном, которые ничего не меняет. С таким же успехом вы можете «пересоздать проект».



    0



    2057 / 1615 / 532

    Регистрация: 29.06.2020

    Сообщений: 6,077

    30.01.2021, 23:03

    14

    целый int для 0 или 1 ?



    0



    Nikis0715

    0 / 0 / 0

    Регистрация: 06.10.2020

    Сообщений: 26

    30.01.2021, 23:11

     [ТС]

    15

    Моя проблема ушла. Убрал в main создание новых объектов класса при подсчетах

    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    
    if (count == 1) {
                Binary bin1(d1), bin2(d2);
                //Binary bin3(bin1 + bin2), (bin1 - bin2)(bin1 - bin2), (bin2 * bin1)(bin1 * bin2), (bin2 - bin1)(bin2 - bin1);
                switch (zn2)
                {
                    case '+':
                        bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = "; (bin1+bin2).printbin(); cout << endl;
                        bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = "; (bin1 + bin2).printdec(); cout << endl;
                        break;
                    case '-':
                        if (bin1.getdec() < bin2.getdec()) {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; (bin2 - bin1).printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; (bin2 - bin1).printdec(); cout << endl;
                            break;
                        }
                        else {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = "; (bin1 - bin2).printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = "; (bin1 - bin2).printdec(); cout << endl;
                            break;
                        }
                    case '*': {
                        bin1.printbin(); cout << " * "; bin2.printbin(); cout << " = "; (bin2 * bin1).printbin(); cout << endl;
                        bin1.printdec(); cout << " * "; bin2.printdec(); cout << " = "; (bin2 * bin1).printdec(); cout << endl;
                        break;
                    }
                    default: cout << "Введен неверный знак. Попробуйте еще раз" << endl;
                        break;
                }
                
            }
            else {
                Binary bin1(d1), bin2(d2);
                //Binary bin3(bin1 + bin2), (bin1 - bin2)(bin1 - bin2), (bin2 * bin1)(bin1 * bin2), (bin2 - bin1)(bin2 - bin1);
                switch (zn2)
                {
                case '+':
                    if (zn1 == '+' && zn3 == '+') {
                        bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = "; (bin1 + bin2).printbin(); cout << endl;
                        bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = "; (bin1 + bin2).printdec(); cout << endl;
                        break;
                    }
                    if (zn1 == '-' && zn3 == '+') {
                        if (bin1.getdec() <= bin2.getdec()) {
                            cout << "-"; bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = "; (bin2 - bin1).printbin(); cout << endl;
                            cout << "-"; bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = "; (bin2 - bin1).printdec(); cout << endl;
                            break;
                        }
                        else {
                            cout << "-"; bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = -"; (bin1 - bin2).printbin(); cout << endl;
                            cout << "-"; bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = -"; (bin1 - bin2).printdec(); cout << endl;
                            break;
                        }
                    }
                    if (zn1 == '+' && zn3 == '-') {
                        if (bin1.getdec() < bin2.getdec()) {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; (bin2 - bin1).printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; (bin2 - bin1).printdec(); cout << endl;
                            break;
                        }
                        else {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = "; (bin1 - bin2).printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = "; (bin1 - bin2).printdec(); cout << endl;
                            break;
                        }
                    }
                    if (zn1 == '-' && zn3 == '-') {
                        cout << '-'; bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; (bin1 + bin2).printbin(); cout << endl;
                        cout << '-'; bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; (bin1 + bin2).printdec(); cout << endl;
                        break;
                    }
                case '-':
                    if (zn1 == '+' && zn3 == '+') {
                        if (bin1.getdec() < bin2.getdec()) {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; (bin2 - bin1).printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; (bin2 - bin1).printdec(); cout << endl;
                            break;
                        }
                        else {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = "; (bin1 - bin2).printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = "; (bin1 - bin2).printdec(); cout << endl;
                            break;
                        }
                    }
                    if (zn1 == '-' && zn3 == '+') {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; (bin1 + bin2).printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; (bin1 + bin2).printdec(); cout << endl;
                            break;
                            }
                    if (zn1 == '+' && zn3 == '-') {
                        bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = "; (bin1 + bin2).printbin(); cout << endl;
                        bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = "; (bin1 + bin2).printdec(); cout << endl;
                        break;
                    }
                    if (zn1 == '-' && zn3 == '-') {
                        if (bin1.getdec() <= bin2.getdec()) {
                            cout << "-"; bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = "; (bin2 - bin1).printbin(); cout << endl;
                            cout << "-"; bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = "; (bin2 - bin1).printdec(); cout << endl;
                            break;
                        }
                        else {
                            cout << "-"; bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = -"; (bin1 - bin2).printbin(); cout << endl;
                            cout << "-"; bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = -"; (bin1 - bin2).printdec(); cout << endl;
                            break;
                        }
                    }
                case '*':
                    if (zn1 == '+' && zn3 == '+') {
                        bin1.printbin(); cout << " * "; bin2.printbin(); cout << " = "; (bin2 * bin1).printbin(); cout << endl;
                        bin1.printdec(); cout << " * "; bin2.printdec(); cout << " = "; (bin2 * bin1).printdec(); cout << endl;
                        break;
                    }
                    if (zn1 == '-' && zn3 == '+') {
                        cout << "-"; bin1.printbin(); cout << " * "; bin2.printbin(); cout << " = -"; (bin2 * bin1).printbin(); cout << endl;
                        cout << "-"; bin1.printdec(); cout << " * "; bin2.printdec(); cout << " = -"; (bin2 * bin1).printdec(); cout << endl;
                        break;
                    }
                    if (zn1 == '+' && zn3 == '-') {
                        bin1.printbin(); cout << " * (-"; bin2.printbin(); cout << ") = -"; (bin2 * bin1).printbin(); cout << endl;
                        bin1.printdec(); cout << " * (-"; bin2.printdec(); cout << ") = -"; (bin2 * bin1).printdec(); cout << endl;
                        break;
                    }
                    if (zn1 == '-' && zn3 == '-') {
                        bin1.printbin(); cout << " * "; bin2.printbin(); cout << " = "; (bin2 * bin1).printbin(); cout << endl;
                        bin1.printdec(); cout << " * "; bin2.printdec(); cout << " = "; (bin2 * bin1).printdec(); cout << endl;
                        break;
                    }
                default: cout << "Введен неверный знак. Попробуйте еще раз" << endl;
                    break;
                }
            }

    Вот так исправил умножение

    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    Binary operator*(Binary num1, Binary num2) {
        int* bin1 = num1.getbin();
        int* bin2 = num2.getbin();
        int mem1 = num1.getmem();
        int mem2 = num2.getmem();
        int mem3 = num1.getmem() + num2.getmem();
        if (mem3 > 32) {
            cout << "Максимального размера выделяемой памяти недостаточно для получения ответа. Операция прервана";
            return Binary(0);
        }
        int* bin3 = new int[mem3];
        for (int i = 0; i < mem3; i++) {
            bin3[i] = 0;
        }
     
        for (int i = 0; i < mem1; i++) {
            for (int j = 0; j < mem2; j++) {
                bin3[i + j] += bin1[i] * bin2[j];
                if (bin3[i + j] > 1) {
                    bin3[i + j] -= 2;
                    bin3[i + j + 1] += 1;
                }
            }
        }
     
        return Binary(bin3, mem3);
    }

    Но теперь почему-то 127+1 выдает 0. Вот весь получившийся код

    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    
    #include <iostream>
    #include <string>
     
    using namespace std;
     
    class Binary {
    public:
        int mem;
        int* bin;
        int dec;
     
        //Binary();
        Binary(int dec);
        Binary(int dec, int mem);
        Binary(int* bin, int mem);
        Binary(const Binary& num2);
        ~Binary() {
            delete[]bin;
        }
        friend Binary operator+(Binary num1, Binary num2);
        friend Binary operator-(Binary num1, Binary num2);
        friend Binary operator*(Binary num1, Binary num2);
        friend void dectobin(int dec, int* bin, int mem);
        friend int bintodec(int* bin, int mem);
        int getmem();
        int getdec();
        int* getbin();
        void printbin();
        void printdec();
    };
     
    void dectobin(int dec, int* bin, int mem) {
        int dec1 = dec;
        for (int i = 0; i < mem; i++) {
     
            bin[i] = dec1 % 2;
            dec1 = (dec1 - bin[i]) / 2;
        }
    }
     
    int bintodec(int* bin, int mem) {
        int dec = 0;
        for (int i = 0; i < mem; i++) {
            dec = dec + bin[i] * (int)pow(2, i);
        }
        return dec;
    }
    /*
    Binary::Binary() {
        mem = 8;
        dec = 0;
        bin = new int[mem];
        dectobin(dec, bin, mem);
    }
    */
    Binary::Binary(int d) {
        dec = d;
        mem = 8;
        if (d >= 0 && d < pow(2, 8)) mem = 8;
        if (d >= pow(2, 8) && d < pow(2, 16)) mem = 16;
        if (d >= pow(2, 16) && d < pow(2, 32)) mem = 32;
        bin = new int[mem];
        dectobin(dec, bin, mem);
    }
     
    Binary::Binary(int d, int m) {
        dec = d;
        mem = m;
        bin = new int[mem];
        dectobin(dec, bin, mem);
    }
     
    Binary::Binary(int* b, int m) {
        mem = m;
        bin = new int[mem];
        for (int i = 0; i < mem; i++) {
            bin[i] = b[i];
        }
        dec = bintodec(bin, mem);
    }
     
    Binary::Binary(const Binary& num2) {
        mem = num2.mem;
        dec = num2.dec;
        bin = new int[mem];
        for (int i = 0; i < mem; i++) {
            bin[i] = num2.bin[i];
        }
    }
     
    int Binary::getmem() {
        return this->mem;
    }
     
    int* Binary::getbin() {
        return bin;
    }
     
    int Binary::getdec() {
        return this->dec;
    }
     
    void Binary::printbin() {
        for (int i = mem - 1; i >= 0; i--) {
            cout << bin[i];
        }
    }
     
    void Binary::printdec() {
        cout << dec;
    }
     
    Binary operator+(Binary num1, Binary num2) {
        int* bin1 = num1.getbin();
        int* bin2 = num2.getbin();
        int mem3;
        if (num1.getmem() > num2.getmem()) {
            mem3 = num1.getmem();
            int* bin3 = new int[mem3];
            for (int i = 0; i < mem3; i++) {
                bin3[i] = 0;
            }
            for (int i = 0; i < mem3 - 8; i++) {
                bin3[i] += bin1[i] + bin2[i];
                if (bin3[i] > 1) {
                    bin3[i] -= 2;
                    bin3[i + 1] += 1;
                }
            }
            for (int i = mem3 - 8; i < mem3; i++) {
                bin3[i] += bin1[i];
                if (bin3[mem3 - 1] > 1) {
                    cout << endl << "Ошибка. Недостаточно выделенной памяти в размере " << mem3 << " бит" << endl;
                    return Binary(0);
                }
                if (bin3[i] > 1) {
                    bin3[i] -= 2;
                    if (i < mem3 - 2) bin3[i + 1] += 1;
                }
            }
            return Binary(bin3, mem3);
        }
     
        if (num1.getmem() == num2.getmem()) {
            mem3 = num1.getmem();
            int* bin3 = new int[mem3];
            for (int i = 0; i < mem3; i++) {
                bin3[i] = 0;
            }
            for (int i = 0; i < mem3; i++) {
                bin3[i] += bin1[i] + bin2[i];
                if (bin3[mem3 - 1] > 1) {
                    cout << endl << "Ошибка. Недостаточно выделенной памяти в размере " << mem3 << " бит" << endl;
                    return Binary(0);
                }
                if (bin3[i] > 1) {
                    bin3[i] -= 2;
                    if (i < mem3 - 2) bin3[i + 1] += 1;
                }
     
            }
            return Binary(bin3, mem3);
        }
     
        if (num1.getmem() < num2.getmem()) {
            mem3 = num2.getmem();
            int* bin3 = new int[mem3];
            for (int i = 0; i < mem3; i++) {
                bin3[i] = 0;
            }
            for (int i = 0; i < mem3 - 8; i++) {
                bin3[i] += bin1[i] + bin2[i];
                if (bin3[i] > 1) {
                    bin3[i] -= 2;
                    bin3[i + 1] += 1;
                }
            }
            for (int i = mem3 - 8; i < mem3; i++) {
                if (i == mem3 - 1 && bin3[mem3 -1 ] == 2) {
                    cout << endl << "Ошибка. Недостаточно выделенной памяти в размере " << mem3 << " бит" << endl;
                    return Binary(0);
                }
                if (bin3[i] > 1) {
                    bin3[i] -= 2;
                    if (i < mem3 - 2) bin3[i + 1] += 1;
                }
     
            }
            return Binary(bin3, mem3);
        }
        return Binary(0);
    }
     
    Binary operator-(Binary num1, Binary num2) {
        int* bin1 = num1.getbin();
        int* bin2 = num2.getbin();
     
        int mem3 = 8;
        if (num1.getmem() > num2.getmem()) {
            mem3 = num1.getmem();
            int* bin3 = new int[mem3];
            for (int i = 0; i < mem3 - 8; i++) {
                if (bin1[i] < bin2[i]) {
                    bin1[i + 1] -= 1;
                    bin1[i] += 2;
                    bin3[i] = bin1[i] - bin2[i];
                }
                else bin3[i] = bin1[i] - bin2[i];
            }
            for (int i = mem3 - 8; i < mem3; i++) {
                bin3[i] = bin1[i];
            }
     
            return Binary(bin3, mem3);
        }
     
        if (num1.getmem() < num2.getmem()) {
            mem3 = num2.getmem();
            int* bin3 = new int[mem3];
            for (int i = 0; i < mem3 - 8; i++) {
                if (bin1[i] < bin2[i]) {
                    bin1[i + 1] -= 1;
                    bin1[i] += 2;
                    bin3[i] = bin1[i] - bin2[i];
                }
                else bin3[i] = bin1[i] - bin2[i];
            }
            for (int i = mem3 - 8; i < mem3; i++) {
                bin3[i] = bin1[i];
            }
     
            return Binary(bin3, mem3);
        }
     
        if (num1.getmem() == num2.getmem()) {
            mem3 = num1.getmem();
            int* bin3 = new int[mem3];
            for (int i = 0; i < mem3; i++) {
                    if (bin1[i] < bin2[i]) {
                        bin1[i + 1] -= 1;
                        bin1[i] += 2;
                        bin3[i] = bin1[i] - bin2[i];
                    }
                    else bin3[i] = bin1[i] - bin2[i];
            }
            return Binary(bin3, mem3);
        }
        return Binary(0);
    }
     
    Binary operator*(Binary num1, Binary num2) {
        int* bin1 = num1.getbin();
        int* bin2 = num2.getbin();
        int mem1 = num1.getmem();
        int mem2 = num2.getmem();
        int mem3 = num1.getmem() + num2.getmem();
        if (mem3 > 32) {
            cout << "Максимального размера выделяемой памяти недостаточно для получения ответа. Операция прервана";
            return Binary(0);
        }
        int* bin3 = new int[mem3];
        for (int i = 0; i < mem3; i++) {
            bin3[i] = 0;
        }
     
        for (int i = 0; i < mem1; i++) {
            for (int j = 0; j < mem2; j++) {
                bin3[i + j] += bin1[i] * bin2[j];
                if (bin3[i + j] > 1) {
                    bin3[i + j] -= 2;
                    bin3[i + j + 1] += 1;
                }
            }
        }
     
        return Binary(bin3, mem3);
    }
     
    void main() {
        setlocale(LC_ALL, "Ru");
        int otv(1);
        int d1(0), d2(0), count(0);
        char zn1('+'), zn2('+'), zn3('+'); //переменные для хранения знаков. Знак 2 определяем действие между числами. Знаки 1 и 3 - знаки чисел
        string v;//строка, для считывания выражения
        string D1, D2; //строки, в которые запишем числа
        //while (otv == 1) {
            cout << "Введите выражение" << endl;
            getline(cin, v); //считываем введенное выражение в строку
            int length = v.length(); // определяем длину строки
            /////////////////////////////////////////////
            //1 ЭТАП: ОПРЕДЕЛЕНИЕ ЗНАКОВ В ВЫРАЖЕНИИ//
            count = 0; //зануляем счетчик кол-ва знаков в строке
            for (int i = 0; i < length; i++) {
                if (v[i] == '-' || v[i] == '+' || v[i] == '*') count++; //узнаем кол-во знаков в строке
            }
     
            int* pointer = new int[3];//в этот массив сохраним номера позиций знаков, чтобы разграничить и считать числа
            for (int i = 0; i < 3; i++) {
                pointer[i] = 0;
            }
            if (count == 1) { // если в строке только 1 знак
                zn1 = '+';
                zn3 = '+'; // то 1 и 3 знак - это +
                for (int i = 0; i < length; i++) {
                    if (v[i] == '-' || v[i] == '+' || v[i] == '*') {
                        zn2 = v[i]; //определяем знак 2
                        pointer[0] = i;
                    }
                }
                D1.assign(v, 0, pointer[0]);//сохраняем первое число в строку
                d1 = atoi(D1.c_str());//переводим строку в число
                D2.assign(v, pointer[0] + 1, length - pointer[0]);//по аналогии
                d2 = atoi(D2.c_str());
            }
     
     
            if (count == 2) { //если в строке  2 знака, то
                count = 0;
                if (v[0] == '-') {// если первый знак -, то далее ищем второй знак
                    zn1 = '-';
                    for (int i = 0; i < length; i++) {
                        if (v[i] == '-' || v[i] == '+' || v[i] == '*') {
                            zn2 = v[i];
                            pointer[0] = i;
                        }
                    }
                    zn3 = '+';
                    D1.assign(v, 1, pointer[0] - 1);//сохраняем первое число в строку
                    d1 = atoi(D1.c_str());//переводим строку в число
                    D2.assign(v, pointer[0] + 1, length - pointer[0]);//по аналогии
                    d2 = atoi(D2.c_str());
                }
                else { //иначе 
                    count = 0; //зануляем счетчик кол-ва знаков
                    for (int i = 0; i < length; i++) {
                        if (v[i] == '-' || v[i] == '+' || v[i] == '*') {
                            if (count == 1) {
                                zn3 = v[i];
                                count++;
                                pointer[1] = i;
                            }
                            if (count == 0) {
                                zn2 = v[i];
                                count++;
                                pointer[0] = i;
                            }
                        }
                    }
                    D1.assign(v, 0, pointer[0]);//сохраняем первое число в строку
                    d1 = atoi(D1.c_str());//переводим строку в число
                    D2.assign(v, pointer[1] + 1, length - pointer[1]);//по аналогии
                    d2 = atoi(D2.c_str());
                }
                count = 2;
            }
     
     
            if (count == 3) {//если в строке 3 знака, то сохраняем знаки поочередно 
                count = 0;
                for (int i = 0; i < length; i++) {
                    if (v[i] == '-' || v[i] == '+' || v[i] == '*') {
                        if (count == 2) {
                            zn3 = v[i];
                            count++;
                            pointer[2] = i;
                        }
                        if (count == 1) {
                            zn2 = v[i];
                            count++;
                            pointer[1] = i;
                        }
                        if (count == 0) {
                            zn1 = v[i];
                            count++;
                            pointer[0] = i;
                        }
                    }
                }
                D1.assign(v, pointer[0] + 1, pointer[1] - pointer[0] - 1);//сохраняем первое число в строку
                d1 = atoi(D1.c_str());//переводим строку в число
                D2.assign(v, pointer[2] + 1, length - pointer[2]);//по аналогии
                d2 = atoi(D2.c_str());
                count = 3;
            }
            /////////////////////
            //2 ЭТАП. ВЫЧИСЛЕНИЕ ВЫРАЖЕНИЯ//
            if (count == 1) {
                Binary bin1(d1), bin2(d2);
                //Binary bin3(bin1 + bin2), (bin1 - bin2)(bin1 - bin2), (bin2 * bin1)(bin1 * bin2), (bin2 - bin1)(bin2 - bin1);
                switch (zn2)
                {
                    case '+':
                        bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = "; (bin1+bin2).printbin(); cout << endl;
                        bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = "; (bin1 + bin2).printdec(); cout << endl;
                        break;
                    case '-':
                        if (bin1.getdec() < bin2.getdec()) {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; (bin2 - bin1).printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; (bin2 - bin1).printdec(); cout << endl;
                            break;
                        }
                        else {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = "; (bin1 - bin2).printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = "; (bin1 - bin2).printdec(); cout << endl;
                            break;
                        }
                    case '*': {
                        bin1.printbin(); cout << " * "; bin2.printbin(); cout << " = "; (bin2 * bin1).printbin(); cout << endl;
                        bin1.printdec(); cout << " * "; bin2.printdec(); cout << " = "; (bin2 * bin1).printdec(); cout << endl;
                        break;
                    }
                    default: cout << "Введен неверный знак. Попробуйте еще раз" << endl;
                        break;
                }
                
            }
            else {
                Binary bin1(d1), bin2(d2);
                //Binary bin3(bin1 + bin2), (bin1 - bin2)(bin1 - bin2), (bin2 * bin1)(bin1 * bin2), (bin2 - bin1)(bin2 - bin1);
                switch (zn2)
                {
                case '+':
                    if (zn1 == '+' && zn3 == '+') {
                        bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = "; (bin1 + bin2).printbin(); cout << endl;
                        bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = "; (bin1 + bin2).printdec(); cout << endl;
                        break;
                    }
                    if (zn1 == '-' && zn3 == '+') {
                        if (bin1.getdec() <= bin2.getdec()) {
                            cout << "-"; bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = "; (bin2 - bin1).printbin(); cout << endl;
                            cout << "-"; bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = "; (bin2 - bin1).printdec(); cout << endl;
                            break;
                        }
                        else {
                            cout << "-"; bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = -"; (bin1 - bin2).printbin(); cout << endl;
                            cout << "-"; bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = -"; (bin1 - bin2).printdec(); cout << endl;
                            break;
                        }
                    }
                    if (zn1 == '+' && zn3 == '-') {
                        if (bin1.getdec() < bin2.getdec()) {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; (bin2 - bin1).printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; (bin2 - bin1).printdec(); cout << endl;
                            break;
                        }
                        else {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = "; (bin1 - bin2).printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = "; (bin1 - bin2).printdec(); cout << endl;
                            break;
                        }
                    }
                    if (zn1 == '-' && zn3 == '-') {
                        cout << '-'; bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; (bin1 + bin2).printbin(); cout << endl;
                        cout << '-'; bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; (bin1 + bin2).printdec(); cout << endl;
                        break;
                    }
                case '-':
                    if (zn1 == '+' && zn3 == '+') {
                        if (bin1.getdec() < bin2.getdec()) {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; (bin2 - bin1).printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; (bin2 - bin1).printdec(); cout << endl;
                            break;
                        }
                        else {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = "; (bin1 - bin2).printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = "; (bin1 - bin2).printdec(); cout << endl;
                            break;
                        }
                    }
                    if (zn1 == '-' && zn3 == '+') {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; (bin1 + bin2).printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; (bin1 + bin2).printdec(); cout << endl;
                            break;
                            }
                    if (zn1 == '+' && zn3 == '-') {
                        bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = "; (bin1 + bin2).printbin(); cout << endl;
                        bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = "; (bin1 + bin2).printdec(); cout << endl;
                        break;
                    }
                    if (zn1 == '-' && zn3 == '-') {
                        if (bin1.getdec() <= bin2.getdec()) {
                            cout << "-"; bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = "; (bin2 - bin1).printbin(); cout << endl;
                            cout << "-"; bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = "; (bin2 - bin1).printdec(); cout << endl;
                            break;
                        }
                        else {
                            cout << "-"; bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = -"; (bin1 - bin2).printbin(); cout << endl;
                            cout << "-"; bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = -"; (bin1 - bin2).printdec(); cout << endl;
                            break;
                        }
                    }
                case '*':
                    if (zn1 == '+' && zn3 == '+') {
                        bin1.printbin(); cout << " * "; bin2.printbin(); cout << " = "; (bin2 * bin1).printbin(); cout << endl;
                        bin1.printdec(); cout << " * "; bin2.printdec(); cout << " = "; (bin2 * bin1).printdec(); cout << endl;
                        break;
                    }
                    if (zn1 == '-' && zn3 == '+') {
                        cout << "-"; bin1.printbin(); cout << " * "; bin2.printbin(); cout << " = -"; (bin2 * bin1).printbin(); cout << endl;
                        cout << "-"; bin1.printdec(); cout << " * "; bin2.printdec(); cout << " = -"; (bin2 * bin1).printdec(); cout << endl;
                        break;
                    }
                    if (zn1 == '+' && zn3 == '-') {
                        bin1.printbin(); cout << " * (-"; bin2.printbin(); cout << ") = -"; (bin2 * bin1).printbin(); cout << endl;
                        bin1.printdec(); cout << " * (-"; bin2.printdec(); cout << ") = -"; (bin2 * bin1).printdec(); cout << endl;
                        break;
                    }
                    if (zn1 == '-' && zn3 == '-') {
                        bin1.printbin(); cout << " * "; bin2.printbin(); cout << " = "; (bin2 * bin1).printbin(); cout << endl;
                        bin1.printdec(); cout << " * "; bin2.printdec(); cout << " = "; (bin2 * bin1).printdec(); cout << endl;
                        break;
                    }
                default: cout << "Введен неверный знак. Попробуйте еще раз" << endl;
                    break;
                }
            }
            
            //otv = 1;
        //}
     
    }



    0



    TheCalligrapher

    Вездепух

    Эксперт CЭксперт С++

    10435 / 5704 / 1553

    Регистрация: 18.10.2014

    Сообщений: 14,098

    30.01.2021, 23:23

    16

    По-прежнему:
    Распространенные ошибки
    Распространенные ошибки

    Добавлено через 2 минуты

    Цитата
    Сообщение от Nikis0715
    Посмотреть сообщение

    Вот так исправил умножение

    После такого шага мне не ясно, зачем вы вообще тогда делаете вот это

    Цитата
    Сообщение от Nikis0715
    Посмотреть сообщение

    C++
    1
    2
    3
    
        if (d >= 0 && d < pow(2, 8)) mem = 8;
        if (d >= pow(2, 8) && d < pow(2, 16)) mem = 16;
        if (d >= pow(2, 16) && d < pow(2, 32)) mem = 32;

    Зачем нужны все эти манипуляции, если можно просто везде и всегда выделять ровно 32 и не мучаться?



    0



    Nikis0715

    0 / 0 / 0

    Регистрация: 06.10.2020

    Сообщений: 26

    31.01.2021, 00:21

     [ТС]

    17

    Такие вот требования у преподавателя

    Добавлено через 29 минут
    Добавил перегрузку оператора присваивания, поменял возвращаемое значение main. И самое главное, исправил ошибку в операторе сложения, из-за которой 127+1 было = 0. Вот итоговая программа, полностью рабочая

    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    
    #include <iostream>
    #include <string>
     
    using namespace std;
     
    class Binary {
    public:
        int mem;
        int* bin;
        int dec;
     
        //Binary();
        Binary(int dec);
        Binary(int dec, int mem);
        Binary(int* bin, int mem);
        Binary(const Binary& num2);
        ~Binary() {
            delete[]bin;
        }
        friend Binary operator+(Binary num1, Binary num2);
        friend Binary operator-(Binary num1, Binary num2);
        friend Binary operator*(Binary num1, Binary num2);
        Binary& operator=(const Binary& num1);
        friend void dectobin(int dec, int* bin, int mem);
        friend int bintodec(int* bin, int mem);
        int getmem();
        int getdec();
        int* getbin();
        void printbin();
        void printdec();
    };
     
    void dectobin(int dec, int* bin, int mem) {
        int dec1 = dec;
        for (int i = 0; i < mem; i++) {
     
            bin[i] = dec1 % 2;
            dec1 = (dec1 - bin[i]) / 2;
        }
    }
     
    int bintodec(int* bin, int mem) {
        int dec = 0;
        for (int i = 0; i < mem; i++) {
            dec = dec + bin[i] * (int)pow(2, i);
        }
        return dec;
    }
    /*
    Binary::Binary() {
        mem = 8;
        dec = 0;
        bin = new int[mem];
        dectobin(dec, bin, mem);
    }
    */
    Binary& Binary::operator=(const Binary& num2) {
        if (this == &num2) return *this;
        delete[] this->bin;
        dec = num2.dec;
        mem = num2.mem;
        bin = new int[mem];
        for (int i = 0; i < mem; i++) {
            bin[i] = num2.bin[i];
        }
        return *this;
    }
    Binary::Binary(int d) {
        dec = d;
        mem = 8;
        if (d >= 0 && d < pow(2, 8)) mem = 8;
        if (d >= pow(2, 8) && d < pow(2, 16)) mem = 16;
        if (d >= pow(2, 16) && d < pow(2, 32)) mem = 32;
        bin = new int[mem];
        dectobin(dec, bin, mem);
    }
     
    Binary::Binary(int d, int m) {
        dec = d;
        mem = m;
        bin = new int[mem];
        dectobin(dec, bin, mem);
    }
     
    Binary::Binary(int* b, int m) {
        mem = m;
        bin = new int[mem];
        for (int i = 0; i < mem; i++) {
            bin[i] = b[i];
        }
        dec = bintodec(bin, mem);
    }
     
    Binary::Binary(const Binary& num2) {
        mem = num2.mem;
        dec = num2.dec;
        bin = new int[mem];
        for (int i = 0; i < mem; i++) {
            bin[i] = num2.bin[i];
        }
    }
     
    int Binary::getmem() {
        return this->mem;
    }
     
    int* Binary::getbin() {
        return bin;
    }
     
    int Binary::getdec() {
        return this->dec;
    }
     
    void Binary::printbin() {
        for (int i = mem - 1; i >= 0; i--) {
            cout << bin[i];
        }
    }
     
    void Binary::printdec() {
        cout << dec;
    }
     
    Binary operator+(Binary num1, Binary num2) {
        int* bin1 = num1.getbin();
        int* bin2 = num2.getbin();
        int mem3;
        if (num1.getmem() > num2.getmem()) {
            mem3 = num1.getmem();
            int* bin3 = new int[mem3];
            for (int i = 0; i < mem3; i++) {
                bin3[i] = 0;
            }
            for (int i = 0; i < mem3 - 8; i++) {
                bin3[i] += bin1[i] + bin2[i];
                if (bin3[i] > 1) {
                    bin3[i] -= 2;
                    bin3[i + 1] += 1;
                }
            }
            for (int i = mem3 - 8; i < mem3; i++) {
                bin3[i] += bin1[i];
                if (bin3[mem3 - 1] > 1) {
                    cout << endl << "Ошибка. Недостаточно выделенной памяти в размере " << mem3 << " бит" << endl;
                    return Binary(0);
                }
                if (bin3[i] > 1) {
                    bin3[i] -= 2;
                    if (i < mem3 - 1) bin3[i + 1] += 1;
                }
            }
            return Binary(bin3, mem3);
        }
     
        if (num1.getmem() == num2.getmem()) {
            mem3 = num1.getmem();
            int* bin3 = new int[mem3];
            for (int i = 0; i < mem3; i++) {
                bin3[i] = 0;
            }
            for (int i = 0; i < mem3; i++) {
                bin3[i] += bin1[i] + bin2[i];
                if (bin3[mem3 - 1] > 1) {
                    cout << endl << "Ошибка. Недостаточно выделенной памяти в размере " << mem3 << " бит" << endl;
                    return Binary(0);
                }
                if (bin3[i] > 1) {
                    bin3[i] -= 2;
                    if (i < mem3 - 1) bin3[i + 1] += 1;
                }
     
            }
            return Binary(bin3, mem3);
        }
     
        if (num1.getmem() < num2.getmem()) {
            mem3 = num2.getmem();
            int* bin3 = new int[mem3];
            for (int i = 0; i < mem3; i++) {
                bin3[i] = 0;
            }
            for (int i = 0; i < mem3 - 8; i++) {
                bin3[i] += bin1[i] + bin2[i];
                if (bin3[i] > 1) {
                    bin3[i] -= 2;
                    bin3[i + 1] += 1;
                }
            }
            for (int i = mem3 - 8; i < mem3; i++) {
                if (i == mem3 - 1 && bin3[mem3 -1 ] == 2) {
                    cout << endl << "Ошибка. Недостаточно выделенной памяти в размере " << mem3 << " бит" << endl;
                    return Binary(0);
                }
                if (bin3[i] > 1) {
                    bin3[i] -= 2;
                    if (i < mem3 - 1) bin3[i + 1] += 1;
                }
     
            }
            return Binary(bin3, mem3);
        }
        return Binary(0);
    }
     
    Binary operator-(Binary num1, Binary num2) {
        int* bin1 = num1.getbin();
        int* bin2 = num2.getbin();
     
        int mem3 = 8;
        if (num1.getmem() > num2.getmem()) {
            mem3 = num1.getmem();
            int* bin3 = new int[mem3];
            for (int i = 0; i < mem3 - 8; i++) {
                if (bin1[i] < bin2[i]) {
                    bin1[i + 1] -= 1;
                    bin1[i] += 2;
                    bin3[i] = bin1[i] - bin2[i];
                }
                else bin3[i] = bin1[i] - bin2[i];
            }
            for (int i = mem3 - 8; i < mem3; i++) {
                bin3[i] = bin1[i];
            }
     
            return Binary(bin3, mem3);
        }
     
        if (num1.getmem() < num2.getmem()) {
            mem3 = num2.getmem();
            int* bin3 = new int[mem3];
            for (int i = 0; i < mem3 - 8; i++) {
                if (bin1[i] < bin2[i]) {
                    bin1[i + 1] -= 1;
                    bin1[i] += 2;
                    bin3[i] = bin1[i] - bin2[i];
                }
                else bin3[i] = bin1[i] - bin2[i];
            }
            for (int i = mem3 - 8; i < mem3; i++) {
                bin3[i] = bin1[i];
            }
     
            return Binary(bin3, mem3);
        }
     
        if (num1.getmem() == num2.getmem()) {
            mem3 = num1.getmem();
            int* bin3 = new int[mem3];
            for (int i = 0; i < mem3; i++) {
                    if (bin1[i] < bin2[i]) {
                        bin1[i + 1] -= 1;
                        bin1[i] += 2;
                        bin3[i] = bin1[i] - bin2[i];
                    }
                    else bin3[i] = bin1[i] - bin2[i];
            }
            return Binary(bin3, mem3);
        }
        return Binary(0);
    }
     
    Binary operator*(Binary num1, Binary num2) {
        int* bin1 = num1.getbin();
        int* bin2 = num2.getbin();
        int mem1 = num1.getmem();
        int mem2 = num2.getmem();
        int mem3 = num1.getmem() + num2.getmem();
        if (mem3 > 32) {
            cout << "Максимального размера выделяемой памяти недостаточно для получения ответа. Операция прервана";
            return Binary(0);
        }
        int* bin3 = new int[mem3];
        for (int i = 0; i < mem3; i++) {
            bin3[i] = 0;
        }
     
        for (int i = 0; i < mem1; i++) {
            for (int j = 0; j < mem2; j++) {
                bin3[i + j] += bin1[i] * bin2[j];
                if (bin3[i + j] > 1) {
                    bin3[i + j] -= 2;
                    bin3[i + j + 1] += 1;
                }
            }
        }
     
        return Binary(bin3, mem3);
    }
     
    int main() {
        setlocale(LC_ALL, "Ru");
        int otv(1);
        int d1(0), d2(0), count(0);
        char zn1('+'), zn2('+'), zn3('+'); //переменные для хранения знаков. Знак 2 определяем действие между числами. Знаки 1 и 3 - знаки чисел
        string v;//строка, для считывания выражения
        string D1, D2; //строки, в которые запишем числа
        //while (otv == 1) {
            cout << "Введите выражение" << endl;
            getline(cin, v); //считываем введенное выражение в строку
            int length = v.length(); // определяем длину строки
            /////////////////////////////////////////////
            //1 ЭТАП: ОПРЕДЕЛЕНИЕ ЗНАКОВ В ВЫРАЖЕНИИ//
            count = 0; //зануляем счетчик кол-ва знаков в строке
            for (int i = 0; i < length; i++) {
                if (v[i] == '-' || v[i] == '+' || v[i] == '*') count++; //узнаем кол-во знаков в строке
            }
     
            int* pointer = new int[3];//в этот массив сохраним номера позиций знаков, чтобы разграничить и считать числа
            for (int i = 0; i < 3; i++) {
                pointer[i] = 0;
            }
            if (count == 1) { // если в строке только 1 знак
                zn1 = '+';
                zn3 = '+'; // то 1 и 3 знак - это +
                for (int i = 0; i < length; i++) {
                    if (v[i] == '-' || v[i] == '+' || v[i] == '*') {
                        zn2 = v[i]; //определяем знак 2
                        pointer[0] = i;
                    }
                }
                D1.assign(v, 0, pointer[0]);//сохраняем первое число в строку
                d1 = atoi(D1.c_str());//переводим строку в число
                D2.assign(v, pointer[0] + 1, length - pointer[0]);//по аналогии
                d2 = atoi(D2.c_str());
            }
     
     
            if (count == 2) { //если в строке  2 знака, то
                count = 0;
                if (v[0] == '-') {// если первый знак -, то далее ищем второй знак
                    zn1 = '-';
                    for (int i = 0; i < length; i++) {
                        if (v[i] == '-' || v[i] == '+' || v[i] == '*') {
                            zn2 = v[i];
                            pointer[0] = i;
                        }
                    }
                    zn3 = '+';
                    D1.assign(v, 1, pointer[0] - 1);//сохраняем первое число в строку
                    d1 = atoi(D1.c_str());//переводим строку в число
                    D2.assign(v, pointer[0] + 1, length - pointer[0]);//по аналогии
                    d2 = atoi(D2.c_str());
                }
                else { //иначе 
                    count = 0; //зануляем счетчик кол-ва знаков
                    for (int i = 0; i < length; i++) {
                        if (v[i] == '-' || v[i] == '+' || v[i] == '*') {
                            if (count == 1) {
                                zn3 = v[i];
                                count++;
                                pointer[1] = i;
                            }
                            if (count == 0) {
                                zn2 = v[i];
                                count++;
                                pointer[0] = i;
                            }
                        }
                    }
                    D1.assign(v, 0, pointer[0]);//сохраняем первое число в строку
                    d1 = atoi(D1.c_str());//переводим строку в число
                    D2.assign(v, pointer[1] + 1, length - pointer[1]);//по аналогии
                    d2 = atoi(D2.c_str());
                }
                count = 2;
            }
     
     
            if (count == 3) {//если в строке 3 знака, то сохраняем знаки поочередно 
                count = 0;
                for (int i = 0; i < length; i++) {
                    if (v[i] == '-' || v[i] == '+' || v[i] == '*') {
                        if (count == 2) {
                            zn3 = v[i];
                            count++;
                            pointer[2] = i;
                        }
                        if (count == 1) {
                            zn2 = v[i];
                            count++;
                            pointer[1] = i;
                        }
                        if (count == 0) {
                            zn1 = v[i];
                            count++;
                            pointer[0] = i;
                        }
                    }
                }
                D1.assign(v, pointer[0] + 1, pointer[1] - pointer[0] - 1);//сохраняем первое число в строку
                d1 = atoi(D1.c_str());//переводим строку в число
                D2.assign(v, pointer[2] + 1, length - pointer[2]);//по аналогии
                d2 = atoi(D2.c_str());
                count = 3;
            }
            /////////////////////
            //2 ЭТАП. ВЫЧИСЛЕНИЕ ВЫРАЖЕНИЯ//
            if (count == 1) {
                Binary bin1(d1), bin2(d2);
                //Binary bin3(bin1 + bin2), (bin1 - bin2)(bin1 - bin2), (bin2 * bin1)(bin1 * bin2), (bin2 - bin1)(bin2 - bin1);
                switch (zn2)
                {
                    case '+':
                        bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = "; (bin1+bin2).printbin(); cout << endl;
                        bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = "; (bin1 + bin2).printdec(); cout << endl;
                        break;
                    case '-':
                        if (bin1.getdec() < bin2.getdec()) {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; (bin2 - bin1).printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; (bin2 - bin1).printdec(); cout << endl;
                            break;
                        }
                        else {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = "; (bin1 - bin2).printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = "; (bin1 - bin2).printdec(); cout << endl;
                            break;
                        }
                    case '*': {
                        bin1.printbin(); cout << " * "; bin2.printbin(); cout << " = "; (bin2 * bin1).printbin(); cout << endl;
                        bin1.printdec(); cout << " * "; bin2.printdec(); cout << " = "; (bin2 * bin1).printdec(); cout << endl;
                        break;
                    }
                    default: cout << "Введен неверный знак. Попробуйте еще раз" << endl;
                        break;
                }
                
            }
            else {
                Binary bin1(d1), bin2(d2);
                //Binary bin3(bin1 + bin2), (bin1 - bin2)(bin1 - bin2), (bin2 * bin1)(bin1 * bin2), (bin2 - bin1)(bin2 - bin1);
                switch (zn2)
                {
                case '+':
                    if (zn1 == '+' && zn3 == '+') {
                        bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = "; (bin1 + bin2).printbin(); cout << endl;
                        bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = "; (bin1 + bin2).printdec(); cout << endl;
                        break;
                    }
                    if (zn1 == '-' && zn3 == '+') {
                        if (bin1.getdec() <= bin2.getdec()) {
                            cout << "-"; bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = "; (bin2 - bin1).printbin(); cout << endl;
                            cout << "-"; bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = "; (bin2 - bin1).printdec(); cout << endl;
                            break;
                        }
                        else {
                            cout << "-"; bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = -"; (bin1 - bin2).printbin(); cout << endl;
                            cout << "-"; bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = -"; (bin1 - bin2).printdec(); cout << endl;
                            break;
                        }
                    }
                    if (zn1 == '+' && zn3 == '-') {
                        if (bin1.getdec() < bin2.getdec()) {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; (bin2 - bin1).printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; (bin2 - bin1).printdec(); cout << endl;
                            break;
                        }
                        else {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = "; (bin1 - bin2).printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = "; (bin1 - bin2).printdec(); cout << endl;
                            break;
                        }
                    }
                    if (zn1 == '-' && zn3 == '-') {
                        cout << '-'; bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; (bin1 + bin2).printbin(); cout << endl;
                        cout << '-'; bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; (bin1 + bin2).printdec(); cout << endl;
                        break;
                    }
                case '-':
                    if (zn1 == '+' && zn3 == '+') {
                        if (bin1.getdec() < bin2.getdec()) {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; (bin2 - bin1).printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; (bin2 - bin1).printdec(); cout << endl;
                            break;
                        }
                        else {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = "; (bin1 - bin2).printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = "; (bin1 - bin2).printdec(); cout << endl;
                            break;
                        }
                    }
                    if (zn1 == '-' && zn3 == '+') {
                            bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = -"; (bin1 + bin2).printbin(); cout << endl;
                            bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = -"; (bin1 + bin2).printdec(); cout << endl;
                            break;
                            }
                    if (zn1 == '+' && zn3 == '-') {
                        bin1.printbin(); cout << " - "; bin2.printbin(); cout << " = "; (bin1 + bin2).printbin(); cout << endl;
                        bin1.printdec(); cout << " - "; bin2.printdec(); cout << " = "; (bin1 + bin2).printdec(); cout << endl;
                        break;
                    }
                    if (zn1 == '-' && zn3 == '-') {
                        if (bin1.getdec() <= bin2.getdec()) {
                            cout << "-"; bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = "; (bin2 - bin1).printbin(); cout << endl;
                            cout << "-"; bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = "; (bin2 - bin1).printdec(); cout << endl;
                            break;
                        }
                        else {
                            cout << "-"; bin1.printbin(); cout << " + "; bin2.printbin(); cout << " = -"; (bin1 - bin2).printbin(); cout << endl;
                            cout << "-"; bin1.printdec(); cout << " + "; bin2.printdec(); cout << " = -"; (bin1 - bin2).printdec(); cout << endl;
                            break;
                        }
                    }
                case '*':
                    if (zn1 == '+' && zn3 == '+') {
                        bin1.printbin(); cout << " * "; bin2.printbin(); cout << " = "; (bin2 * bin1).printbin(); cout << endl;
                        bin1.printdec(); cout << " * "; bin2.printdec(); cout << " = "; (bin2 * bin1).printdec(); cout << endl;
                        break;
                    }
                    if (zn1 == '-' && zn3 == '+') {
                        cout << "-"; bin1.printbin(); cout << " * "; bin2.printbin(); cout << " = -"; (bin2 * bin1).printbin(); cout << endl;
                        cout << "-"; bin1.printdec(); cout << " * "; bin2.printdec(); cout << " = -"; (bin2 * bin1).printdec(); cout << endl;
                        break;
                    }
                    if (zn1 == '+' && zn3 == '-') {
                        bin1.printbin(); cout << " * (-"; bin2.printbin(); cout << ") = -"; (bin2 * bin1).printbin(); cout << endl;
                        bin1.printdec(); cout << " * (-"; bin2.printdec(); cout << ") = -"; (bin2 * bin1).printdec(); cout << endl;
                        break;
                    }
                    if (zn1 == '-' && zn3 == '-') {
                        bin1.printbin(); cout << " * "; bin2.printbin(); cout << " = "; (bin2 * bin1).printbin(); cout << endl;
                        bin1.printdec(); cout << " * "; bin2.printdec(); cout << " = "; (bin2 * bin1).printdec(); cout << endl;
                        break;
                    }
                default: cout << "Введен неверный знак. Попробуйте еще раз" << endl;
                    break;
                }
            }
            
            //otv = 1;
        //}
            return 0;
    }



    0



    TheCalligrapher

    Вездепух

    Эксперт CЭксперт С++

    10435 / 5704 / 1553

    Регистрация: 18.10.2014

    Сообщений: 14,098

    31.01.2021, 00:54

    18

    Цитата
    Сообщение от Nikis0715
    Посмотреть сообщение

    Такие вот требования у преподавателя

    Да, но когда вы сделали

    C++
    1
    
    int mem3 = num1.getmem() + num2.getmem();

    в операторе умножения, вы не нарушили эти требования?



    0



    IT_Exp

    Эксперт

    87844 / 49110 / 22898

    Регистрация: 17.06.2006

    Сообщений: 92,604

    31.01.2021, 00:54

    Помогаю со студенческими работами здесь

    Выход из цикла for: требуется, чтобы программа завершила свою работу как только найдет первую единицу матрицы
    дана матрица A размера MxN, состоящая из нулей и единиц,
    Требуется, чтобы программа завершила свою…

    Программа завершает работу с непонятным кодом
    Чесnно говоря я понимаю от части почему программа в конце не выдает 0 , так как я не написал нигде…

    Посимвольная конкатенация строк, программа завершает работу с кодом 3
    Доброго времени суток. Программа крашится на 22 строке на 2-й итерации вложенного цикла, не…

    Как сделать, чтобы пока одна функция не завершила работу, другая бы не могла начаться?
    Здравствуйте, написал JS код, который анимирует две картинки, однако если запускать функцию…

    Программа вылетает с ошибкой Process returned -1073740940 (0xC0000374)
    Всем привет! Есть вот такое задание : &quot;Одномерный массив А, состоящий из N элементов, заполняется…

    Процесс завершил работу с кодом 0
    Здравствуйте,сейчас пишу текстовую игру для конкурса начинающих программистов.
    Пишу в консоли и…

    Искать еще темы с ответами

    Или воспользуйтесь поиском по форуму:

    18

    Антивирус – это обязательная программа для всех компьютеров, с целью безопасной работы. Однако, для максимальной защиты, антивирус должен каждый день обновляться, а то и несколько раз на день, чтобы подгружать новые данные о вирусах и не упустить из виду новую угрозу. Функция автоматического обновления вирусных баз включена в каждый антивирус и Dr.Web не является тому исключением. Но что делать, если по каким-то причинам у вас перестал обновляться Доктор Веб? Можно ли самостоятельно устранить ошибку и наладить работу антивируса для защиты своего компьютера?

    Содержание

    1. Почему не обновляется Dr.Web
    2. Способы решения проблемы
    3. Восстановление или перезагрузка программы
    4. Обновление вручную
    5. Устранение ошибок диска
    6. Обращение в техподдержку

    Самой популярной причиной, почему антивирус не обновляется – это отсутствие интернет-соединения. Ведь вирусные базы берутся из сервера компании при помощи подключения к интернету. Еще одной причиной приостановки обновления антивируса является срок окончания лицензии программы. Но если вы точно уверены, что Dr.Веб исправно работал, лицензия не просрочена, вы самостоятельно не отключали обновление и компьютер подключен к интернету, то в чем же может быть проблема? Антивирус в результате системного сбоя может прекратить обновляться в привычном режиме, если произошло нарушение в скриптах, часть их повреждена и как результат – ошибка репозитория. Поэтому исправлять подобный сбой придется вручную.

    Способы решения проблемы

    Если вы столкнулись с ошибкой репозитория или другими словами ошибка 10, которая отвечает за обновление антивируса, то не стоит впадать в панику, реанимировать Доктор Веб вы сможете самостоятельно. Для этого ознакомьтесь с каждым из способов и выберите для себя оптимальный.

    Восстановление или перезагрузка программы

    Простым, но иногда действенным способом является перезапуск программы. Для этого нажмите на значок антивирус в правом нижнем углу панели и среди доступных функций, выберите выход. Теперь запустите утилиту и попробуйте нажать «Обновление». Если такой метод не сработал, тогда возьмемся за восстановление Доктора Web при помощи стандартных инструментов Windows:

    1. Нажимаете на кнопку «Пуск».
    2. Справа выбираете «Панель управления» или «Параметры» (далее «Система»), в зависимости от версии системы.
    3. В меню системы выбираете раздел «Программы» или «Установка и удаление программ».
    4. Переходите в него, после чего на экране появляется список всех приложений на компьютере.
    5. Выбираете «Dr.Web» и вверху нажимаете «Изменить», а после «Восстановить».
    6. На экране запустится процесс сканирования файлов программы.

    Когда процесс восстановления антивируса завершится, обязательно перезагрузите компьютер и проверьте исправность обновления.

    Обновление вручную

    Если первый способ вам не помог, а вы хотите здесь и сейчас произвести обновление Dr.Веба, то в программе доступна функция ручного обновления. Что она подразумевает? Вам необходимо самостоятельно сохранить в отдельную папку на компьютере последнюю версию обновлений вирусных баз, а после в настройках антивируса указать место, откуда необходимо подтянуть обновление. Делается это следующим образом:

    1. Запустите Доктор Web.
    2. В левом нижнем углу интерфейса программы нажмите на замочек, чтобы он открылся, после справа выбираете «Настройки» (значок шестеренки).
    3. Переходите в раздел «Основные», а потом выбираете раздел «Обновление».
    4. В пункте «Источник обновлений» нужно внизу нажать на кнопку «Изменить» и выбрать следующий тип «Локальная или сетевая папка».
    5. Далее нажимаете «Обзор» и указываете папку на компьютере, где вы сохранили пакет последней вирусной базы.
    6. Нажимаете «Ок» и запускаете обновление.

    При реализации такого метода обязательно выключите интернет, чтобы программа не пыталась каждую секунду связаться с сервером для автоматического обновления. Однако вы должны понимать, что такой способ поможет решить проблему с обновлением Доктора Web в одноразовом порядке, то есть, чтобы поддерживать актуальную версию антивирусных баз, вам нужно каждый раз скачивать новый пакет и помещать его в папку, откуда антивирус подтягивает обновления. Поэтому для надежной защиты компьютера нужно исправить эту проблему и вернуть автоматическое обновление Dr.Web.

    Устранение ошибок диска

    Теперь переходим к более сложному способу исправления ошибки обновления, однако, по отзывам многих пользователей, именно он оказался наиболее эффективным. Итак, что здесь нужно сделать? Если антивирус Доктор Web перестал обновляться без видимых на то причин, то возможно, что в момент системного сбоя повредились файлы на Локальном диске. Переходим к решению проблемы:

    1. Сначала запускаем проверку исправности жесткого диска. Открываете меню компьютера, на «Локальный диск C» ставите мышкой и переходите в «Свойства» при помощи правой кнопки.
    2. Далее выбираете «Сервис», а после «Проверить».
    3. Ждете окончания сканирования.

    Если в результатах проверки система требует исправить неполадки, то переходим к действиям. В первую очередь нам нужно отключить в антивирусе такие компоненты, как «Самозащита» и «Превентивная защита», так как именно эти модули отвечают за внесение изменений в программу, а после перенастроить программу:

    1. Сначала отключите интернет.
    2. Справа на панели нажмите на иконку «Web».
    3. Открываете доступ к изменению настроек – нажимаете на замочек в левом нижнем углу, чтобы он открылся.
    4. Переходите в раздел «Компоненты защиты».
    5. Напротив пункта «Превентивная защита», переводим ползунок в неактивное положение.
    6. Теперь возвращаемся в меню настроек и выбираем раздел «Основные», и таким же образом деактивируем модуль «Самозащита».
    7. Далее повторяем шаги из первого способа по восстановлению программы, через меню «Пуск», «Установка и удаление программ» или «Система», в зависимости от платформы.
    8. Перезагружаете компьютер и проверяете на исправность – начинается автоматического обновление Доктора Web или нет.

    Если данный способ помог исправить проблему, то обязательно верните прежние настройки антивирусу – включите «превентивную защиту» и модуль «Самозащита».

    А если результат проверки не выявил отклонений в жестком диске или восстановление программы не помогло, то остается только одни вариант – переустановить антивирус Доктор Web. Для переустановки необходимо полностью удалить программу и заново ее установить. Чтобы после удаления утилиты не возникло проблем, и не сохранились остаточные файлы, необходимо дополнительно реестр. Если вы не знаете, как это делать, то просто воспользуйтесь специальными очищающими утилитами, например, CCleaner или Master Clean, которые не только почистят компьютер от мусора, но помогают правильно провести процесс деинсталляции. Также для этих целей существует специально разработанная программа от компании Dr.Веб – Web Remover.

    Обращение в техподдержку

    Ну и последний вариант, который спасает при неэффективности всех предыдущих, это обращение в техподдержку сервиса Dr.Web. Специалисты технической службы помогут разобраться с вашей проблемой и предложат ее устранение. Однако процесс обращения в техподдержку заточен в виде отправки специального отчета, а не как это обычно бывает в виде написания обращения. То есть, вам нужно воспользоваться приложением DwSysInfo, где формируется отчет об ошибке работы антивируса и отсылается в компанию. После рассмотрения с вами связывается сотрудник сервиса и устраняет проблему. Преимущества обращения в техподдержку является и то, что специалист может получить дистанционный доступ к вашему компьютеру и «напрямую» настроить автоматическое обновление.

    ( 1 оценка, среднее 5 из 5 )

    Понравилась статья? Поделить с друзьями:

    Читайте также:

  • Dr web security space код ошибки 902
  • Dr web security space is starting как исправить
  • Dr web scanner error code 1722
  • Dr web livedisk код ошибки 33
  • Dr web katana код ошибки 16

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии