读书人

DEBUG ASSERTION FAILED有关问题

发布时间: 2013-04-22 16:01:35 作者: rapoo

DEBUG ASSERTION FAILED问题
代码如下:

#include <afxres.h>
#include <afxdlgs.h>
#include <Windows.h>
#include <D:\备份\windows应用编程实践\windows应用编程实践\resource.h>
HINSTANCE hinst;
LRESULT CALLBACK MainWndProc (HWND, UINT, WPARAM, LPARAM);
BOOL InitApplication (HINSTANCE hInstance)
{
WNDCLASSEX wcx;
wcx.cbSize = sizeof (wcx);//WNDCLASSEX 的大小
wcx.style = CS_HREDRAW | CS_VREDRAW;//从这个窗口类派生的窗口具有的风格
wcx.lpfnWndProc = MainWndProc;//窗口处理函数的指针
wcx.cbClsExtra = 0;//指定紧跟在窗口类结构后的附加字节数
wcx.cbWndExtra = 0;//指定紧跟在窗口事例后的附加字节数
wcx.hInstance = hInstance;//本模块的事例句柄
wcx.hIcon = LoadIcon (NULL, IDI_APPLICATION);//图标的句柄
wcx.hCursor = LoadCursor (NULL, IDC_ARROW);//光标的句柄
wcx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//背景画刷的句柄
wcx.lpszMenuName = NULL;//指向菜单的指针
wcx.lpszClassName = "MYCLASS";//指向类名称的指针
wcx.hIconSm = LoadIcon(NULL, IDI_WINLOGO);//和窗口类关联的小图标。如果该值为NULL。则把hIcon中的图标转换成大小合适的小图标
return (RegisterClassEx (&wcx));
}
HWND CreateEdit (HWND);
BOOL InitInstance (HINSTANCE hInstance, int nCmdShow)
{
HWND hwnd, hwndEdit;
RECT rect;
hwnd = CreateWindow (
"MYCLASS",//WNDCLASSEX中定义的lpszClassName
"NEW",//窗口标题
WS_OVERLAPPEDWINDOW,//创建窗口的风格
CW_USEDEFAULT,//指定窗口的初始水平位置
CW_USEDEFAULT,//指定窗口的初始垂直位置
CW_USEDEFAULT,//以设备单元指明窗口的宽度
CW_USEDEFAULT,//以设备单元指明窗口的高度
NULL,//指向被创建窗口的父窗口或所有者窗口的句柄
LoadMenu (hInstance, MAKEINTRESOURCE(IDR_MENU1)),//菜单句柄
hInstance,//程序实例的句柄
(LPVOID) NULL);
hwndEdit = CreateEdit (hwnd);
ShowWindow (hwnd, nCmdShow);
UpdateWindow (hwnd);
if (!hwnd)
{
return FALSE;
}
else
{
return TRUE;
}
}
HWND CreateEdit (HWND hwndP)
{
HWND hwnde;
hwnde = CreateWindow (
"EDIT",
NULL,
WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_BORDER | ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
hwndP,
(HMENU)NULL,
hinst,
(LPVOID)NULL);
ShowWindow (hwnde, SW_SHOW);
UpdateWindow (hwnde);
return hwnde;
}
LRESULT CALLBACK MainWndProc (HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)//消息处理函数
{
CString lpFileName;
CFileDialog Dia (TRUE);
switch (uMsg)
{
case WM_COMMAND:
switch (LOWORD(wParam))
{
case ID_40001:
{
if (Dia.DoModal ()== IDOK)
{
lpFileName = Dia.GetPathName ();
MessageBox (NULL, lpFileName, "文件路径", MB_OK);//显示读取的文件路径
}
break;
}
default:
break;
}
break;
case WM_DESTROY://窗口消失函数
ExitThread (0);//线程终止
break;
default:
return DefWindowProc (hwnd, uMsg, wParam, lParam);//系统默认消息处理函数
}
UpdateWindow (hwnd);
}
int WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
if (!InitApplication (hInstance))


{
return FALSE;
}
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
while (GetMessage (&msg, (HWND)NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return msg.wParam;
}


没弄懂咋回事...求解
[解决办法]
到底哪句出错了,你点重试,然后不就知道了
[解决办法]
要不你把初始化的代码直接放到winmain里面,别用函数试试。
[解决办法]
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

判断是否越界访问,可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断,可将数组多声明一个元素,并设置数据读写断点在该多出元素对应的地址上。

读书人网 >C++

热点推荐