Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / А можно ли как-то проверить память перед обращением во избежание Access violation ? / 5 сообщений из 5, страница 1 из 1
02.11.2015, 12:32
    #39092592
pointer1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно ли как-то проверить память перед обращением во избежание Access violation ?
Перед завершением потока мне нужно запустить callback-функцию в этом же потоке. Всё работает хорошо. Но если поток завершается во время завершения всей программы, то получаю 0xC0000005: Access violation reading location 0xdddddddd. Т.к. адрес в памяти для функции обратного вызова становится недоступным.
Можно ли как-то перед вызовом каллбак как-то проверить доступность этой области памяти, чтобы не возникала эта ошибка ? Есть какая-нибудь функция типа "IsValidMemory(pointer)" ? Проверять на NULL и nullptr бесполезно. Указатель не пустой.
...
Рейтинг: 0 / 0
02.11.2015, 13:05
    #39092655
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно ли как-то проверить память перед обращением во избежание Access violation ?
Читай про SEH .
По-хорошему надо сделать так чтобы функция не вызывалась когда ее уже нет. Т.е. сначала завершаешь тот код, который callback делает, затем все остальное.
...
Рейтинг: 0 / 0
02.11.2015, 13:42
    #39092706
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно ли как-то проверить память перед обращением во избежание Access violation ?
pointer1получаю 0xC0000005: Access violation reading location 0xdddddddd. Т.к.
адрес в памяти для функции обратного вызова становится недоступным.
Чтобы это предположение было верным, функция должна находиться в загруженной DLL. Ты лучше
проверь адрес с которого идёт обращение по map-файлу и адрес к которому идёт обращение.
Вероятнее всего ты из этого своего callback-а обращаешься к чему-то уже уничтоженному.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.11.2015, 14:15
    #39092759
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно ли как-то проверить память перед обращением во избежание Access violation ?
pointer1Можно ли как-то перед вызовом каллбак как-то проверить доступность этой области памяти, чтобы не возникала эта ошибка ?

А толку? Вдруг память уже распределена под другой объект? Программируйте аккуратно. Сокрытие ошибок программирования только усложнит диагностику программы.
...
Рейтинг: 0 / 0
02.11.2015, 17:46
    #39093057
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А можно ли как-то проверить память перед обращением во избежание Access violation ?
pointer1Перед завершением потока мне нужно запустить callback-функцию в этом же потоке. Всё работает хорошо. Но если поток завершается во время завершения всей программы, то получаю 0xC0000005: Access violation reading location 0xdddddddd. Т.к. адрес в памяти для функции обратного вызова становится недоступным.
Можно ли как-то перед вызовом каллбак как-то проверить доступность этой области памяти, чтобы не возникала эта ошибка ? Есть какая-нибудь функция типа "IsValidMemory(pointer)" ? Проверять на NULL и nullptr бесполезно. Указатель не пустой.

Можно.

Есть фунция Win API IsValidPointer или что-то в этом роде.

Можно и самому такую сделать -- попытаться записать и прочитать что-то по этому адресу. Под SEH.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / А можно ли как-то проверить память перед обращением во избежание Access violation ? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]