Форум программистов, компьютерный форум CyberForum.ru

Необработанное исключение нарушение прав доступа - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Решение нелинейных уравнений. Метод половинного деления http://www.cyberforum.ru/cpp-beginners/thread622655.html
Здравствуйте, помогите, пожалуйста, найти ошибку в программе. Программа выдает верное значение корня, но сильно округляя его. float a,b,e,c,x; TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { a=1; //ïðèñâàèâàíèå ïåðâîíî÷àëüíûõ çíà÷åíèé êîìïîíåíòàì Edit ...
C++ Библиотеки для работы с POP3/SMTP под Windows Что можно использовать для работы с этими протоколами и обработкой почты под виндой? (Естественно не через сокеты) Пробовал собрать libetpan,libvmime но ничего не получилось требуют юниксовые файлы или тупо не компилятся.И это не смотря на то что они идут с проектами под VC++. http://www.cyberforum.ru/cpp-beginners/thread622534.html http://www.cyberforum.ru/cpp-beginners/thread622645.html
C++ soci windows
#include <soci.h> #include <postgresql/soci-postgresql.h> #include <iostream> #include <string> int main() { soci::session sql; }
C++ ReadProcessMemory() Вывести кириллицу в консоль
Здравствуйте, я получил значение "0081D1BAD09ED00B" из ячейки памяти с помощью функции ReadProcessMemory(); char name; ReadProcessMemory(hProcess, (LPVOID)(0x651ACFB1), &name, 10, 0); Я знаю, что это значение содержит в себе кириллическую строку "Окс" (d09ed0bad181) Насколько я понимаю, необходимо развернуть байты и выставить кодировку, чтобы вывести значение переменной на кириллице. Как...
C++ Копирование переменной по её указателю http://www.cyberforum.ru/cpp-beginners/thread622637.html
У меня есть функция main(), в которой static char Pass; очень быстро меняется, и отдельный поток с циклом, и вот беда: глобальная переменная Pass в конце цикла уже не та, что в начале. Вопрос простой: как копировать в начале цикла Раss в какую-нибудь переменную и использовать её? Получается только указатель создавать, а копироваться не хочет ни в какую.
C++ Составить справочник фаната Составить справочник фаната. База спортсмена : анкетные даные, гражданство, национальность, вид спотра , клуб команда вид спорта , матчи . Это не важно. Поиск рекордсмена по матчам. Это структура, но она неправильно работает, ввожу ФИО, а дальше уже ничего нехочет вводиться. #include<iostream.h> #include<conio.h> const int n=3; struct sportsman { char fio; подробнее

Показать сообщение отдельно
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
12.07.2012, 17:20     Необработанное исключение нарушение прав доступа
ok
10 студия должна скушать
Студии можно в настройках проекта, где Code Generation можно выставить Enable c++ Exceptions: With SEH Exceptions (/EHa) или как-то так. тогда ошибка будет ловиться catch(...), а чтоб получить больше инфы об ошибке нужно получить ее сведения.
смысл в том, чтоб указать системе другой обработчик для SEH
делается вызовом
C++
1
_set_se_translator
Ниже пример:
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
class SEH_exception: public std::exception {
 
    static void translator(unsigned int, EXCEPTION_POINTERS* ep) { // новая функция - обработчик
        throw SEH_exception(ep); // кидаем уже наше исключение
    }
    EXCEPTION_POINTERS* m_ep; // инфа, которая может быть потом полезна, Состояние регистров и все такое
    std::string m_what;
public:
    class install { // класс - инсталлятор. Его задача поставить обработчик SEH и вернуть оборатно старый при разрешении 
        _se_translator_function m_old;
    public:
        install() 
            :m_old( _set_se_translator(SEH_exception::translator) )  // устанавливает и сохраняем старый
        {}
        ~install() /*throw()*/ { 
            _set_se_translator(m_old);  // возвращаем взад.
        }
    };
public:
    SEH_exception(EXCEPTION_POINTERS* ep_) 
        :m_ep(ep_) 
    { // просто запишем номер кода в поток и сохраним в строке. в EXCEPTION_POINTERS* есть много другой ценной инфы.
        std::stringstream ss;
        ss << "Error #" << std::hex << m_ep->ExceptionRecord->ExceptionCode;
        m_what = ss.str();
    }
    virtual ~SEH_exception() /*throw()*/ {}
 
    const char * what() const /*throw()*/ { // тут, думаю понятно
        return m_what.c_str(); 
    }
 
};
пример использования:
C++
1
2
3
4
5
6
7
8
9
10
int main() {
    
    try {
        SEH_exception::install e; // ставим
        *(int *)(0) = 10; //нарушаем
    } catch (const std::exception &ex) { 
        std::cout << ex.what() << "\n"; // показываем Error #c0000005
    }
    return 0;
}
Но лучше такие ошибки не прятать и даже не пытаться ловить. Есть, конечно, задачи, где такое нужно, но за скрытие подобного я бы по рукам давал.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru