Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ошибка сегментации

29K
07 июля 2008 года
Existor
20 / / 03.07.2008
При запуске программы в отладчике gdb, компилированной g++ -ом
выдается сообщение:
[COLOR="Red"]Programm received sigral SEGSEGV, Segmentation fault".
0x10015da in ?? ()[/COLOR]
при этом окно программы, написанное на win32 api, становиться недоступным.
Что это за ошибка?
9.4K
07 июля 2008 года
AIGrifon
165 / / 13.11.2007
Чаще всего такая ошибка вызывается ошибкой в коде. Нужно внимательно просмотреть код, либо трассировать и смотреть, где появляется ошибка.
361
07 июля 2008 года
Odissey_
661 / / 19.09.2006
Это ошибка доступа к памяти, возникает в 3 общих случаях:
1) страница к которой обращаешься не существует
2) заданное смещение в странице превышет ее размер
3) не те права доступа к странице

Самый распространенный случай - обращение по некорректному адресу. GDB должен выдавать номер строки на котором произошел слет. Можете привести этот участка кода здесь.
29K
09 июля 2008 года
Existor
20 / / 03.07.2008
Пытался трассировать программу в MinGWStudio выдаёт эту ошибку на 23 строке если трассировать с WinMain. Странно :confused:
Если начинаю с WndProc та же ошибка только после нескольких циклов.
При запуске на исполнение (r) gdb номера строки не выдаёт.
Возникают вопросы:
1. Как трассировать из командной строки в gdb?
2. Как найти место с ошибкой в коде?
вот исходник программы взято из книги Pezold Программирование под Windows 95. Привожу зародыш скелета моей программы так как ошибка именно в нем.

Код:
#include <windows.h>
#define MoveTo(hdc, x, y) MoveToEx (hdc, x, y, NULL)

LRESULT CALLBACK WndProc   (HWND, UINT, WPARAM, LPARAM) ;
LRESULT CALLBACK ChildWndProc (HWND, UINT, WPARAM, LPARAM) ;

char      szChildClass[] = "Checker3_Child" ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
    static char szAppName[] = "Checker3" ;
    HWND        hwnd ;
    MSG         msg ;
    WNDCLASSEX  wndclass ;

    wndclass.cbSize        = sizeof (wndclass) ;
    wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
    wndclass.lpfnWndProc   = WndProc ;
    wndclass.cbClsExtra    = 0 ;
    wndclass.cbWndExtra    = 0 ;
    wndclass.hInstance     = hInstance ;
    wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
    wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
    wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
    wndclass.lpszMenuName  = NULL ;
    wndclass.lpszClassName = szAppName ;
    wndclass.hIconSm       = LoadIcon (NULL, IDI_APPLICATION) ;

    RegisterClassEx (&wndclass) ;

    wndclass.lpfnWndProc   = ChildWndProc ;
    wndclass.cbWndExtra    = sizeof (WORD) ;
    wndclass.hIcon         = NULL ;
    wndclass.lpszClassName = szChildClass ;
    wndclass.hIconSm       = NULL ;

RegisterClassEx (&wndclass) ;

    hwnd = CreateWindow (szAppName, "Checker3 Mouse Hit-Test Demo",
                WS_OVERLAPPEDWINDOW,
                CW_USEDEFAULT, CW_USEDEFAULT,
                CW_USEDEFAULT, CW_USEDEFAULT,
                NULL, NULL, hInstance, NULL) ;

    ShowWindow (hwnd, iCmdShow) ;
    UpdateWindow (hwnd) ;

    while (GetMessage (&msg, NULL, 0, 0)) {
        TranslateMessage (&msg) ;
        DispatchMessage (&msg) ;
    }
    return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
    static HWND hwndD1 ;

    switch (iMsg) {
     
    case WM_CREATE :
        hwndD1 = CreateWindow (szChildClass, NULL,
        WS_CHILDWINDOW | WS_VISIBLE,
        0, 0, 0, 0,
        hwnd, NULL,
        (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE),
        NULL) ;
        return 0 ;

    case WM_SIZE :
        MoveWindow (hwndD1,
        20, 20,
        100, 100, TRUE) ;
        return 0 ;

    case WM_LBUTTONDOWN :
        MessageBeep (0) ;
        return 0 ;

    case WM_DESTROY :
        PostQuitMessage (0) ;
        return 0 ;
    }
return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
}

LRESULT CALLBACK ChildWndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
    HDC         hdc ;
    PAINTSTRUCT ps ;
    RECT        rect ;

    switch (iMsg) {
         
    case WM_CREATE :
        SetWindowWord (hwnd, 0, 0) ;       // on/off flag
        return 0 ;

    case WM_LBUTTONDOWN :
        SetWindowWord (hwnd, 0, 1 ^ GetWindowWord (hwnd, 0)) ;
        InvalidateRect (hwnd, NULL, FALSE) ;
        return 0 ;

    case WM_PAINT :
        hdc = BeginPaint (hwnd, &ps) ;

        GetClientRect (hwnd, &rect) ;
        Rectangle (hdc, 0, 0, rect.right, rect.bottom) ;

        if (GetWindowWord (hwnd, 0)) {
                MoveTo (hdc, 0,          0) ;
                LineTo (hdc, rect.right, rect.bottom) ;
                MoveTo (hdc, 0,          rect.bottom) ;
                LineTo (hdc, rect.right, 0) ;
        }

        EndPaint (hwnd, &ps) ;
        return 0 ;
    }
    return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог