Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Q8
2 / 2 / 0
Регистрация: 16.10.2010
Сообщений: 7
1

Ошибка с выделением памяти для структур

24.12.2010, 13:03. Показов 1059. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня возникла большая проблема.
В функции обработки сообщений я создаю структуру (объявляю переменные), выделяется под неё память и в сообщение WM_CREATE я инициилизирую их.
Но когда обрабатывается сообщение WM_TIMER эти переменные уже находятся под другим адресом где-то фиг знает где и, соотвественно, возникает ошибка обращения к памяти. Я так понимаю покидая сообщение WM_CREATE эти переменные исчезают из области видимости функции обработки сообщений, но потом они появляются уже в другом адресном пространстве, когда вновь идёт вызов этой функции. Я это проследил при дизассемблировании. Вобщем что за хрень?
вот код
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
#include <windows.h>
 
HINSTANCE hInst;
 
typedef struct coord_type
        {
        int x,y;            // źīīšäčķąņū 
        
        } coord, *coord_ptr;
 
 
int InitApp (HINSTANCE App);
LRESULT APIENTRY WndProc (HWND,UINT,WPARAM ,LPARAM );
 
 
int APIENTRY  WinMain (HINSTANCE App,HINSTANCE,LPSTR,int OknIcon)
{
MSG   msg;
 
    if (InitApp(App)) return 1;
    
    while (GetMessage( (LPMSG) &msg, NULL, 0, 0) ) 
     {
        DispatchMessage( (LPMSG) &msg ); 
     }      
    return int(msg.wParam);                               
}   
 
 
LRESULT APIENTRY WndProc (HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
coord xy;
coord_ptr xy1;
 
    switch (message)
    { 
    case WM_LBUTTONUP:
        {
    
 
        }
        break;
 
    case WM_CREATE:
        {
            SetTimer( hWnd, 1,40,NULL);
 
            xy.x = 1;
 
            xy1 = new coord [0];
            xy1->x = 2;
        }
        break;
 
     case WM_DESTROY: 
         {
        KillTimer(hWnd,1);
        PostQuitMessage(0);
         }
        break;
 
     case WM_KEYDOWN:
         {
         if (wParam == VK_ESCAPE) SendMessage (hWnd, WM_DESTROY,0,0);
         }
         break;
 
 
     case WM_TIMER:
         {
int x;
    
            x=xy.x;
            x=xy1->x;
 
         }
        break;
 
    }
return DefWindowProc(hWnd,message,wParam,lParam);   ;
}
 
 
 
 
int InitApp(HINSTANCE App)
{
 
WNDCLASS    wc; 
char Name[] = "PCXDemo";
 
 
    wc.hInstance     = App; 
    wc.hCursor       = LoadCursor( NULL, IDC_ARROW ); 
    wc.hIcon         = LoadIcon(NULL,IDI_APPLICATION); 
    wc.lpszMenuName  = NULL; 
    wc.lpszClassName = Name;   ; 
    wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); 
    wc.style         = CS_VREDRAW | CS_HREDRAW; 
    wc.lpfnWndProc   = WndProc; 
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;   
 
    hInst = App;
 
    if (! RegisterClass( &wc)) return FALSE; 
    HWND hWnd=CreateWindow(Name,"PCX Äåģīķńņšąöč˙",
               WS_VISIBLE | WS_OVERLAPPEDWINDOW,100,100,
               640 ,
               480,
               NULL,NULL,App,NULL);
    if (!hWnd) return 2;
    UnregisterClass(Name,App);
    return 0;
 }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.12.2010, 13:03
Ответы с готовыми решениями:

Ошибка с выделением памяти
выдает ошибку в выделении памяти. никто не подскажет почему? если что -задача звучит так примерно...

Ошибка с выделением динамической памяти
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; class Vector { private: int...

Ошибка в коде с выделением памяти
Не могу понять, в чем проблема? double** FuzzySet::operator&amp;&amp;(FuzzySet* _set) { int k =...

Ошибка с выделением памяти
Помогите с прогой. Какая то ошибка с выделением памяти. В free_result пишет, что вызвано...

1
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
24.12.2010, 19:06 2
Лучший ответ Сообщение было отмечено Q8 как решение

Решение

C++
1
2
static coord xy;
static coord_ptr xy1;
0
24.12.2010, 19:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.12.2010, 19:06
Помогаю со студенческими работами здесь

Динамическое выделением памяти для массивов
Даны три массива вещественных чисел X(25), B(30), Y(25). Из исходных массивов сформировать массив...

Динамическим выделением памяти для буфера по объёму файла
Ув. форумчане, Вот кусок злосчастного кода: in.seekg (0, ios::end); // Позиционируемся в конец...

Написать программу с выделением памяти для двух переменных строкового типа
Здравствуйте! Помогите, пожалуйста, нужно написать программу с выделением памяти для двух...

Проблема с выделением памяти
Пишу вычислительную задачу thread'ы+OpenGL, при загрузке программы контролирую переменную...

Проблемы с выделением памяти
Здравствуйте. Есть контейнер QList &lt;Node *&gt; В Node свой QList &lt;Node *&gt;. Строю программное...

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru