Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4

Хочу взять под свою ответственность ошибку "Необработанное исключение по адресу."

07.08.2020, 00:56. Показов 2728. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня выбивается эта штука
Необработанное исключение по адресу 0x00147583 в версия2.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x04E266A1. Я знаю что это такое ну и конечно почему эта штука выбивается. Я бы хотел бы добавить эту штуку в исключения и взять под свой контроль. Любая информация хранящаяся в ячейке памяти представляет собой набор битов и ничего более, и даже если я получу нестабильное некорректное значение которое лежит по адресу 0x04E266A1, то я бы хотел бы его получить для своих нужд, потому что по этому адресу всё равно что-то храниться. Возможно ли это сделать, или этим исключением полностью и намертво закрыт доступ к этой ячейке памяти.

Добавлено через 3 минуты
Нажимаю Построить решение проект успешно собирается понятное дело что проверить такую ошибку может только компилятор а в библиотеке к примеру её не проверишь значит это инициатива разработчиков и для новичков это очень полезно конечно но не в моём случае.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.08.2020, 00:56
Ответы с готовыми решениями:

Исправить ошибку: необработанное исключение по адресу, нарушение прав доступа при записи по адресу
Помогите, пожалуйста, исправит ошибку. Необработанное исключение по адресу 0x77D88E19 (ntdll.dll) в Lab11.exe: 0xC0000005: нарушение...

Исправить ошибку необработанное исключение по адресу 0x770E3B18 (ntdll.dll) в .exe: 0xC0000005: нарушение прав доступа
Подскажите пожалуйста, с чем может быть связана ошибка : Необработанное исключение по адресу 0x770E3B18 (ntdll.dll) в по.exe: 0xC0000005:...

Необработанное исключение по адресу, нарушение прав доступа при записи по адресу
вот само задание: Авиарейсы (номер рейса, пункт назначения, время вылета, дата вылета, стоимость билета, количество мест). Выбор по дате...

39
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
12.08.2020, 21:21
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Nexi99 Посмотреть сообщение
Также хотелось бы узнать как определить какой из вариантов
EXCEPTION_CONTINUE_EXECUTION
EXCEPTION_CONTINUE_SEARCH
EXCEPTION_EXECUTE_HANDLER
использовать
В сообщении #8 я описал вам, что делает каждый из этих трех вариантов. Если вам там что-то непонятно, то спрашивайте конкретно. Если все понятно, то дальше все зависит только от вашего замысла. Тот вариант, который вам нужен - тот и используйте.
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
12.08.2020, 21:23
Цитата Сообщение от Nexi99 Посмотреть сообщение
если я правильно понял разные виртуальные адреса могут смотреть в один физический
нет, один физический - один виртуальный
один виртуальный - один физический

Добавлено через 24 секунды
Цитата Сообщение от Nexi99 Посмотреть сообщение
Я бы хотел почитать про эту тему
Цитата Сообщение от Nexi99 Посмотреть сообщение
как определить какой из вариантов
Exception-Handler Syntax

Добавлено через 1 минуту
Цитата Сообщение от AndryS1 Посмотреть сообщение
один физический - один виртуальный
один виртуальный - один физический
но при этом один виртуальный МОЖЕТ быть несколькими физическими для разных приложений
0
694 / 304 / 99
Регистрация: 04.07.2014
Сообщений: 851
12.08.2020, 21:35
Цитата Сообщение от Nexi99 Посмотреть сообщение
если я правильно понял
У каждого процесса (экземпляра запущенной программы) своё собственное адресное пространство. И если у процесса А по адресу 0xABCDEF что-то есть, то у процесса Б (даже если это второй экземпляр того же exe) по адресу 0xABCDEF может ничего не быть, а могут быть другие данные.

Но есть случаи когда два процесса имеют доступ к одним и тем же данным. Для простоты: DLL, ядро ОС, специально выделенная общая память. Эти данные будут храниться в одной "физической" памяти. Но эти данные не обязаны иметь один и тот же "виртуальный" адрес в разных процессах.

Добавлено через 5 минут
Цитата Сообщение от Nexi99 Посмотреть сообщение
Я бы хотел почитать про эту тему.
Классические курсы "Системное программирование" на примере UNIX/Linux. Где рассматривают fork, pipe, общую память.
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
12.08.2020, 22:36  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
EXCEPTION_CONTINUE_EXECUTION - вернуть управление на ту же инструкцию, которая вызвала исключение.
Последние 2 понятны вы там в конце строки написали как оно крутиться. А здесь не понятно о какой инструкции идёт речь? Если инструкция вызвала исключение а мы передадим управление на неё произойдёт зацикливание та же авария что и была или не так.

Добавлено через 1 минуту
Цитата Сообщение от AndryS1 Посмотреть сообщение
нет, один физический - один виртуальный
один виртуальный - один физический
А виртуальные адреса создаются на жёстком диске или где, там же есть какой-то файл подкачки, строятся какие-то страницы где видимо и составляется сначала виртуальный список а потом выполняется и процесс скрытый за ним?

Добавлено через 8 минут
Вот нашёл по легче
EXCEPTION_EXECUTE_HANDLER – выполнение программы прекращается;(в моём случае нужно прекращение программы)
EXCEPTION_CONTINUE_EXECUTION – возобновить исполнение программы с точки исключения;
EXCEPTION_CONTINUE_SEARCH – выполняется системная функция UnhandledExceptionFilter.
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
12.08.2020, 22:41
Цитата Сообщение от Nexi99 Посмотреть сообщение
А виртуальные адреса создаются на жёстком диске
нет, они существуют в всё той-же оперативной памяти в таблице страниц

Добавлено через 53 секунды
Цитата Сообщение от Nexi99 Посмотреть сообщение
строятся какие-то страницы где видимо и составляется сначала виртуальный список а потом выполняется и процесс скрытый за ним?
Таблица страниц ОДНА, ей управляет система и строится она во время инициализации ядра

Добавлено через 2 минуты
Цитата Сообщение от Nexi99 Посмотреть сообщение
на жёстком диске или где
это по факту не должно никого волновать, полного доступа к ней у обычного смертного нет, ей полностью управляет система
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
12.08.2020, 22:48
Цитата Сообщение от Nexi99 Посмотреть сообщение
Последние 2 понятны вы там в конце строки написали как оно крутиться. А здесь не понятно о какой инструкции идёт речь? Если инструкция вызвала исключение а мы передадим управление на неё произойдёт зацикливание та же авария что и была или не так.
Совершенно верно. Вариант EXCEPTION_CONTINUE_EXECUTION предназначен для тех ситуаций, когда вы в имеете возможность каком-то образом устранить ту ситуацию, которая привела к исключению. (Это, как правило, непросто.)

Если же вы просто сделаете EXCEPTION_CONTINUE_EXECUTION ничего не поменяв, то, как вы правильно заметили, произойдет возврат на ту же инструкцию, которая снова выбросит то же самое исключение, что запросто может привести к бесконечному циклу.
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
12.08.2020, 23:31  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Если же вы просто сделаете EXCEPTION_CONTINUE_EXECUTION ничего не поменяв, то, как вы правильно заметили, произойдет возврат на ту же инструкцию, которая снова выбросит то же самое исключение, что запросто может привести к бесконечному циклу.
Так зачем такое надо бывают случаи когда это дело можно тоже как то повернуть на пользу? Видимо моя ситуация далеко не исключения когда мне приходится ловить момент выхода за пределы массива?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
12.08.2020, 23:49
Цитата Сообщение от Nexi99 Посмотреть сообщение
Так зачем такое надо бывают случаи когда это дело можно тоже как то повернуть на пользу?
Я не вижу таких ситуаций в контексте языков высокого уровня, ибо возврат в точку исключения в таком случае происходит с точностью до машинной инструкции. Восстановить функциональность конкретной машинной инструкции в контексте языка высокого уровня - бессмысленная задача, за редкими исключениями.

Хотя, конечно, можно придумать такие примеры как EXCEPTION_FLT_DIVIDE_BY_ZERO в ответ на которое вы, допустим, перенастраиваете управляющие флаги FPU, просите его больше не бросать исключений при делении на ноль и возвращаете управление на ту же инструкцию, которая теперь выполнится без выброса исключения.
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
13.08.2020, 00:16
Цитата Сообщение от Nexi99 Посмотреть сообщение
Видимо моя ситуация далеко не исключения когда мне приходится ловить момент выхода за пределы массива?
1. Выход за пределы массива не всегда даёт это исключение (иногда мусор)
2. Такие ситуации нужно устранять на месте, а не потом ловить их специальными __try и __catch
3. Вы уверены что вам нужно это всё? Не рано ли лезть во всю мешуру с обработкой системных исключений (мне кажется в соседних темах вы писали что вы новичок)?
Я на данный момент копипастер
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
13.08.2020, 00:34  [ТС]
Цитата Сообщение от AndryS1 Посмотреть сообщение
1. Выход за пределы массива не всегда даёт это исключение (иногда мусор)
2. Такие ситуации нужно устранять на месте, а не потом ловить их специальными __try и __catch
3. Вы уверены что вам нужно это всё? Не рано ли лезть во всю мешуру с обработкой системных исключений (мне кажется в соседних темах вы писали что вы новичок)?
1. Никакого мусора никогда не было и не будет. Просто это вы так думаете что это мусор, я и ранее так думал нмножко ошибся но всё же оказался прав. Но об этом позже. В нормальной ситуации выход за пределы массива ни когда не даёт исключение за исключением статических массивов, и если они не переданы в функцию. При передаче стат. массива в функцию поля стат. массива теряются(динамического можно узнать, стат. дороговато дешевле создать описатель).
2. Вы не видели мою ситуацию.
3. Нет не рано. Уже поздно я опоздал этак на лет 15ть ну да ладно так со многими. Да и учиться надо. Мне тяжело даётся Метапраграммирование списки кортежи, ребята мне в моих темах показали как работать с ними но времени физически нет это переварить, может зимой посмотрю. Я читал немного литературу но всё равно нужно ещё изучать, люди годами учатся 10ами лет, теперь я это понял, можно бесконечно практиковать программирование. Нет выбора нужно делать.

Добавлено через 1 минуту
Я новичок начало которого закреплено сильной и жестокой практикой, можно сказать сильное начало положено
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
13.08.2020, 00:53
Цитата Сообщение от Nexi99 Посмотреть сообщение
Никакого мусора никогда не было и не будет.
Мусор - общепринятое понятие неизвестных значений, любое обращение за пределы массива даёт UB
Цитата Сообщение от Nexi99 Посмотреть сообщение
В нормальной ситуации выход за пределы массива ни когда не даёт исключение
Вообще, это UB, но как правило, если мы выйдем за границу страницы памяти мы получаем исключение системы, которое вы и пытаетесь обработать
Цитата Сообщение от Nexi99 Посмотреть сообщение
за исключением статических массивов
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
int main()
{
    int a[5] = { 1,2,3,54,6 };
    try {
        std::cout << a[10] << std::endl;
    }
    catch (const std::exception& ex)
    {
        std::cout << "Exception: " << ex.what() << std::endl;
    }
 
}
никаких исключений я не поймаю, никаким обработчиком исключений (но не факт с системными)
Цитата Сообщение от Nexi99 Посмотреть сообщение
Вы не видели мою ситуацию.
Хотел бы увидеть, я никогда не видел чтобы это использовали всерьёз
Цитата Сообщение от Nexi99 Посмотреть сообщение
динамического можно узнать, стат. дороговато дешевле создать описатель
если я не ошибаюсь, стат. массива
1. Не обязательно должен существовать
2. Его получение тоже является UB
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
13.08.2020, 02:36  [ТС]
Цитата Сообщение от AndryS1 Посмотреть сообщение
если мы выйдем за границу страницы памяти мы получаем исключение системы
Ну да, но выход за границу обычного массива не такой болезненный как здесь когда мы летим чёрт знает куда.
Цитата Сообщение от AndryS1 Посмотреть сообщение
никаких исключений я не поймаю, никаким обработчиком исключений
а вы без этой штуки запустите стат. массив и будет космос, компилятор ругнётся матом (динамический нет), а вот если вы статический массив запихнёте в функцию то там поля теряются и там уже даже компилятор не поможет, придётся самому расхлёбывать, а найти размер стат. массива дорого.
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
13.08.2020, 14:05
Цитата Сообщение от Nexi99 Посмотреть сообщение
компилятор ругнётся матом
C++
1
2
3
4
5
6
7
8
#include <iostream>
 
int main()
{
    int a[5] = { 1,2,3,54,6 };
    std::cout << a[10] << std::endl;
 
}
В релизе
Code
1
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
В дебаге
Code
1
========== Build: 1 succeeded, 0 failed, 0 skipped ==========
как видите никаких ошибок
Цитата Сообщение от Nexi99 Посмотреть сообщение
поля теряются
какие поля теряются?
функция принимает указатель(статический массив неявно преобразуется в указатель), по нему мы можем получить доступ ко всем полям
Цитата Сообщение от Nexi99 Посмотреть сообщение
границу обычного массива не такой болезненный
как раз такие выходы хуже всего ловить, мы видим что результат не тот, который мы ожидаем и вместо краша на месте ошибки, приходится отлаживать всё, чтобы найти ошибку (если сразу не заметна)
Цитата Сообщение от Nexi99 Посмотреть сообщение
а найти размер стат. массива дорого.
Каким образом вы найдёте размер статик массива?
есть способ через шаблоны, при этом под каждый размер массива создастся своя функция, которая увеличит размер исполняемого файла
std::size() будет работать только если вы не перевели массив в обычный указатель (например вызовом функции)
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
13.08.2020, 14:24
Цитата Сообщение от AndryS1 Посмотреть сообщение
int a[5] = { 1,2,3,54,6 };
может ругаться из-за способа инициализации, встречался с таким.

можно использовать новый метод инициализации
C++
1
int a[5] { 1,2,3,54,6 };
не проверял, но для STL классов уже работает.
А старый стиль инициализации закрытый.

Не по теме:


не пойму зачем так часто менять спецификации с++ 14 17 20, ща скоро 23 будет... /



Добавлено через 2 минуты
Nexi99, с++ Вам точно нужен ? уж больно тяжко он Вам дается .
может все же С# ?
0
13.08.2020, 14:32

Не по теме:

Цитата Сообщение от SmallEvil Посмотреть сообщение
может ругаться из-за способа инициализации, встречался с таким.
спасибо, запомню

Не по теме:


Цитата Сообщение от SmallEvil Посмотреть сообщение
ща скоро 23 будет... /
а я всё ещё использую для случайных чисел сишный rand()..

0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
13.08.2020, 19:49  [ТС]
Ладно ребята спасибо за помощь больше в этой теме не пишите проблема решена.
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
25.08.2020, 22:32  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
В какой еще "ячейке памяти"? Вы работаете на платформе с виртуальной памятью. А вышепроцитированное системное SEH-исключение в большинстве случаев означает, что вы попытались обратиться по виртуальному адресу, с которым вообще не ассоциирована никакая память. Никакой "ячейки памяти" по этому адресу не существует. По этому адресу располагается "пустота".
А каким образом система или программа или компилятор определяет что произошёл выход за виртуальный лист, по ходу указанный мною ложный адрес должен сопоставляться со списком адресов имеющихся на виртуальной странице, если его там нет значит процесса не существует и происходит вылет, если он там есть то компилятор попытается его посмотреть чтобы вывести результат, примерно так это работает или как-то по другому?
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
26.08.2020, 17:39
Цитата Сообщение от Nexi99 Посмотреть сообщение
если он там есть то компилятор попытается его посмотреть чтобы вывести результат
компилятор ничего не делает, он скомпилил и отдыхает себе спокойно
Цитата Сообщение от Nexi99 Посмотреть сообщение
если его там нет значит процесса не существует и происходит вылет
значит памяти там нет (а не "процесса"), система кидает СИСТЕМНОЕ исключение в вашу прогу, если она(прога) не смогла сразу же перехватить его, вызовется принудительное завершение процесса

Добавлено через 2 минуты
Цитата Сообщение от Nexi99 Посмотреть сообщение
сопоставляться со списком адресов имеющихся на виртуальной странице
он сопоставляется со списком страниц памяти
если вашему процессу не была выделена страница, которая хранит в себе нужный адрес, который вам нужен, системе не остаётся ничего иного, кроме как кинуть исключение

ещё исключения могут быть при попытке записи в ReadOnly страницу
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
26.08.2020, 19:52
Цитата Сообщение от Nexi99 Посмотреть сообщение
А каким образом система или программа или компилятор определяет что произошёл выход за виртуальный лист

С каждым процессом ОС ассоциирует таблицу страниц, которая для каждого адреса в адресном пространстве процесса отвечает на вопрос о том, существует ли страница, содержащая этот адрес, и если существует, то где она в данный момент физически располагается.
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
26.08.2020, 20:32  [ТС]
Цитата Сообщение от AndryS1 Посмотреть сообщение
он сопоставляется со списком страниц памяти
если вашему процессу не была выделена страница, которая хранит в себе нужный адрес, который вам нужен, системе не остаётся ничего иного, кроме как кинуть исключение
ещё исключения могут быть при попытке записи в ReadOnly страницу
Ну я примерно так и спросил. Значит в этих страницах записаны эти адреса, имеется в виду корректные и проходит проверка на то существует ли адрес в странице или нет. Просто я написал своими словами. Я читал про эти механизмы просто решил уточнить детали. С исключением разобрался словил всё нормально.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.08.2020, 20:32

Необработанное исключение по адресу 0x00ED4891 в strings.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCCCCCCCC
Программа толком не написан, проверял ранд и возникли проблемы. Ф-ция ранд генерирует одно и тоже число, но если убрать srand(time(0));,...

Необработанное исключение по адресу 0x00105FD7 в Динамические структуры: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCDCDCE09
Необработанное исключение по адресу 0x00105FD7 в Динамические структуры.exe: 0xC0000005: нарушение прав доступа при чтении по адресу...

Необработанное исключение по адресу 0x00632D2C в Step2.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCDCDCDCD
Выдает сообщение &quot;Необработанное исключение по адресу 0x00632D2C в Step2.exe: 0xC0000005: нарушение прав доступа при чтении по адресу...

Необработанное исключение по адресу 0x001B3371 в XXX.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFDF
Делал консольную змейку и столкнулся вот с такой проблемой. void stena(char **arr) { int y = 0; int x = 0; ...

Необработанное исключение по адресу 0x00F71B85 в lab 12_1.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0
Всем привет, ошибка возникает при добавлении переменной minqq1, помогите понять в чем проблема, вот код: #include &lt;stdio.h&gt; ...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru