Для начала я изучаю атм 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;
}
Ребят помогите, кодить не умею
Кажется, сейчас хорошее время для узнать, как отлаживать свои программы. В частности, используйте отладчик, чтобы поймать сбой в действии, чтобы определить, когда и где в вашем коде это происходит. Тогда вы также сможете проверить значения всех задействованных переменных.
Дело в том, что я не ставил точку останова
Я использовал отладчик, но думаю, проблема была связана с каким-то системным файлом или зоной памяти, потому что перезапуск vs компьютер не может это исправить, и мой код я в порядке
я забыл. Проблема появляется в строке регистрации класса.
Найдите время, чтобы прочитать страницы помощи, особенно разделы с названиями "Какие темы я могу спросить здесь?" и «Какие типы вопросов мне следует избегать?». Также пожалуйста взять тур и читай о том, как задавать хорошие вопросы.
Также прочтите этот контрольный список вопросов и все idownvotedbecau.se, чтобы узнать, почему ваш вопрос может быть отклонен.
Вы не инициализировали windowClass, попробуйте memset(&windowClass,0,sieof(WNDCLASSEX))
Когда вы видите что-то узнаваемое в адресе, например «Нарушение прав доступа по адресу 0xcccccccc», этот адрес может что-то значить. Согласно страница Wiki о магических числах, 0xcccccccc может означать, что вы ушли с конца того, что использовалось в стеке, или просто имеете неинициализированный указатель.
Он инициализируется автоматически, потому что при попытке определить переменные ошибок не возникало. Проблема заключалась в переменных, которые я не инициализировал
Верхний ответ был полезен и, думаю, полезным, если я не найду проблему





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