Доступность памяти

Для начала я изучаю атм WIN32. Итак, я решил найти несколько путеводителей в сети. Я нашел несколько статей об этом, но в 4-й статье учитель написал код, который вызвал исключение, которое остановило процесс и написало: «Эта строка вызвала точку останова». В этом коде использовались некоторые действия с памятью (GlobalAlloc, GlobalFree) и некоторые действия со шрифтом, которые, как мне кажется, могли вызвать недостаток памяти. Я подумал, что если я удалю этот код, я удалю и эту проблему. Но теперь мой код не может работать, и всегда происходит некоторая ошибка: «Доступ к виалации по адресу 0xcccccccc». Это сообщение появляется в строке RegisterClassEx (). Я не знаю, какую зону памяти следует освободить. Скажите, ребята, что мне делать? Я использую VS17 и Windows 10. Вот мой код, написанный вручную (не обязательно):

#include "stdafx.h"
#include <Windows.h>
LPCWSTR szClassName = L"defaultWindow";
LRESULT CALLBACK WindowProcedure(HWND hWindow, UINT message, WPARAM wParam, 
LPARAM lParam)
{
    switch (message)
    {
    case WM_CREATE:
        MessageBoxW(hWindow, L"Hello!", L"Program", MB_OK | 
        MB_ICONINFORMATION);
        break;
    case WM_DESTROY:
        PostQuitMessage(NULL);
        break;
    default:
        return DefWindowProcW(hWindow, message, wParam, lParam);
    }
    return NULL;
}

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE pInstance, LPTSTR 
lpszCmdLine, int nCmdShow)
{
    WNDCLASSEX windowClass;
    windowClass.cbSize = sizeof(windowClass);
    windowClass.cbClsExtra = 0;
    windowClass.cbWndExtra = 0;
    windowClass.style = CS_VREDRAW | CS_HREDRAW;
    windowClass.hIcon = LoadIcon(hInstance, IDI_WINLOGO);
    windowClass.hCursor = LoadCursor(hInstance, IDC_ARROW);
    windowClass.hIconSm = LoadIcon(hInstance, IDI_WINLOGO);
    windowClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
    windowClass.lpfnWndProc = WindowProcedure;
    windowClass.lpszClassName = szClassName;

    if (!RegisterClassEx(&windowClass))
    {
        MessageBoxW((HWND)NULL, L"Window class couldn't be registered!", 
         L"Error!", MB_OK | MB_ICONERROR);
         return NULL;
     }

     HWND hMainWindow = CreateWindowW(szClassName, L"Программа", 
     WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 
     CW_USEDEFAULT, 
     (HWND)NULL,
        (HMENU)NULL, hInstance, (LPARAM)NULL);

    if (!hMainWindow)
    {
         MessageBoxW((HWND)NULL, L"Window couldn't be 
         created!",L"Error!",MB_OK | MB_ICONERROR);
         return NULL;
    }

    ShowWindow(hMainWindow, nCmdShow);
    UpdateWindow(hMainWindow);

    MSG message;

    while (GetMessageW(&message, hMainWindow, (UINT)NULL, (UINT)NULL))
    {
        TranslateMessage(&message);
        DispatchMessage(&message);
    }
    return message.wParam;
}

Ребят помогите, кодить не умею

Исключение и точка останова не связаны между собой.

Captain Giraffe 19.07.2018 17:08

Кажется, сейчас хорошее время для узнать, как отлаживать свои программы. В частности, используйте отладчик, чтобы поймать сбой в действии, чтобы определить, когда и где в вашем коде это происходит. Тогда вы также сможете проверить значения всех задействованных переменных.

Some programmer dude 19.07.2018 17:08

Дело в том, что я не ставил точку останова

Yu Alypse 19.07.2018 17:08

Я использовал отладчик, но думаю, проблема была связана с каким-то системным файлом или зоной памяти, потому что перезапуск vs компьютер не может это исправить, и мой код я в порядке

Yu Alypse 19.07.2018 17:10

я забыл. Проблема появляется в строке регистрации класса.

Yu Alypse 19.07.2018 17:11

Найдите время, чтобы прочитать страницы помощи, особенно разделы с названиями "Какие темы я могу спросить здесь?" и «Какие типы вопросов мне следует избегать?». Также пожалуйста взять тур и читай о том, как задавать хорошие вопросы.

Some programmer dude 19.07.2018 17:22

Также прочтите этот контрольный список вопросов и все idownvotedbecau.se, чтобы узнать, почему ваш вопрос может быть отклонен.

Some programmer dude 19.07.2018 17:22

Вы не инициализировали windowClass, попробуйте memset(&windowClass,0,sieof(WNDCLASSEX))

PeterT 19.07.2018 17:23

Когда вы видите что-то узнаваемое в адресе, например «Нарушение прав доступа по адресу 0xcccccccc», этот адрес может что-то значить. Согласно страница Wiki о магических числах, 0xcccccccc может означать, что вы ушли с конца того, что использовалось в стеке, или просто имеете неинициализированный указатель.

user4581301 19.07.2018 17:24

Он инициализируется автоматически, потому что при попытке определить переменные ошибок не возникало. Проблема заключалась в переменных, которые я не инициализировал

Yu Alypse 19.07.2018 17:25

Верхний ответ был полезен и, думаю, полезным, если я не найду проблему

Yu Alypse 19.07.2018 17:26
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
11
69
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Итак, я наконец понял, что забыл добавить lpszMenuName и hInstance. Извините, что зря потратил время xD

Ответ принят как подходящий

Вы никогда не инициализируете windowClass.hInstance или windowClass.lpszMenuName, и поэтому они имеют любые случайные значения, которые занимают память. Если вы измените строку:

WNDCLASSEX windowClass;

к

WNDCLASSEX windowClass {};

Эти члены будут инициализированы нулем.

спасибо, чувак, уже получил, но если я не найду, это мне очень поможет

Yu Alypse 19.07.2018 19:27

Другие вопросы по теме