函数处出现异常0xC0000005: 执行位置 0xCCCCCCCC 时发生访问冲突。

creatWindow函数处出现异常0xC0000005: 执行位置 0xCCCCCCCC 时发生访问冲突。

我是初学MFC,在第一次创建window时,在creatWindow函数发生异常,一开始百度0xC0000005异常发生的原因,一般都说是因为栈溢出导致的问题,以及检查指针初始化的问题,当时代码为:

hwnd = CreateWindowW(wc.lpszClassName, 
					TEXT("My_First_Window"), 
					WS_OVERLAPPEDWINDOW, 
					CW_USEDEFAULT,
				    CW_USEDEFAULT, 
				    CW_USEDEFAULT, 
				    CW_USEDEFAULT, 
				    NULL,
				    NULL,
				    hInstance, 
				    NULL);

我当时猜测是hInstance或者hwnd未赋值的问题。然后又去百度各种博客和查看windows帮助文档,看到creatWindow函数原型为

void CreateWindowA(
   lpClassName,
   lpWindowName,
   dwStyle,
   x,
   y,
   nWidth,
   nHeight,
   hWndParent,
   hMenu,
   hInstance,
   lpParam
);

发现其函数返回值为Void,与网上各种博客其返回值为HWND,然后在帮助文档中又发现creatWindowExA函数的返回值为HWND,于是将creatWindow函数换成creatWindowExA函数,发现还是出现异常,于是排除hwnd未赋值这一猜测 。一次偶然的机会,在运行出现异常时,我用鼠标去查看各个参数的值,

	//1.设计窗口
	WNDCLASS wc;
	//ZeroMemory(&wc, sizeof(wc));//初始化wc
	wc.cbClsExtra = 0;//窗口类的额外内存
	wc.cbWndExtra = 0;//窗口的额外内存
	wc.hbrBackground = (HBRUSH)GetStockObject(DEVICE_DEFAULT_FONT);
	wc.hCursor = LoadCursor(hInstance, IDC_APPSTARTING);
	wc.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
	wc.hInstance = hInstance; //应用程序实例句柄
   // wc.lpfnWndProc = WindowProc;   //窗口过程
	wc.lpszClassName =TEXT("My_Window");//窗口类名称
	wc.lpszMenuName = NULL;//菜单名称
	wc.style = 0;//显示风格,0为默认风格

发现结构体wc的各值如下:
其中wc.lpfnWndProc的值为0xcccccccc,正好与异常中的执行位置0xcccccccc处发生访问冲突。这说明在创建窗口时必须为窗口指明窗口过程,这里的wc.lpfnWndProc为一个指针,指向窗口过程。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值