AfxMessageBox — нарушение доступа

Вот что происходит. Когда я пытаюсь запустить AfxMessageBox из моего класса расширения CDialog, я получаю ошибку (см. Ниже). Я погуглил в интернете, но не смог. Это единственное место, где происходит сбой окна сообщений, и я знаю, что остальная часть кода работает (я прошел через это).

Кто-нибудь знает, как это исправить?

Заранее спасибо!

Сообщение об ошибке при открытии AFXMESSAGEBOX:

Необработанное исключение в 0x014b4b70 в IsoPro.exe: 0xC0000005: Место чтения нарушения доступа 0x34333345.

Код для запуска AfxMessageBox, изнутри CDialog

LPTSTR temp;
mainPassword.GetWindowText((LPTSTR)temp,100);
CString cstr;
cstr.Format("mainPassword = %s",temp);
AfxMessageBox(cstr);

Код для отображения CDialog:

CEnterpriseManagementDialog* emd = new CEnterpriseManagementDialog();
emd->Create(IDD_ENTERPRISE_MANAGEMENT_DIALOG);
emd->ShowWindow(SW_SHOW);

2

Решение

Проблема в том, как вы используете GetWindowText:

LPTSTR temp;
mainPassword.GetWindowText((LPTSTR)temp,100);

Вы позволяете GetWindowText попытаться написать некоторым нераспределенный память, передаваемая неинициализированным temp указатель. Если вы действительно хотите использовать необработанный буфер вывода, вам следует выделять место для этого до передавая указатель на GetWindowTextНапример:

TCHAR temp[100];
mainPassword.GetWindowText(temp, _countof(temp));
// NOTE: No need to LPTSTR-cast

Но, так как вы используете C ++, вы можете просто использовать строку учебный класс лайк CStringвместо необработанных буферов, например:

CString password;
mainPassword.GetWindowText(password);

CString msg;
msg.Format(_T("mainPassword = %s"), password.GetString());
// or you can just concatenate CStrings using operator+ ...
AfxMessageBox(msg);
3

Другие решения

Похоже, переменная temp является неинициализированным указателем (определение ЛПЦТР это символ *).

Попробуйте вместо этого определить temp как массив:

TCHAR temp[64];
1

По вопросам рекламы [email protected]