各位大侠,求助,编译错误

yudingjun0611 2009-12-09 10:31:34
Debug Assertion Failed!
program:c:\ \Debug\.exe
file:wingdi.cpp
line:1120

For information on how your program can cause an assertion
failure,see the Visual c++ documentation on asserts.

(Press Retry to debug the application)

一般什么情况出现这样的错误?
本人初学vc++,按照例子编了一个连连看,可是编完了发现不行。还需要我贴那部分的代码吗?谢谢了 !
...全文
252 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackiesen 2011-08-11
  • 打赏
  • 举报
回复
可能是编译环境配置问题!可以找个好好比对下!
self001 2011-08-11
  • 打赏
  • 举报
回复
不如把工程传到网上,叫人帮你试调下,有点乱!
jingavin0 2011-08-11
  • 打赏
  • 举报
回复
你这没错误啊,可能是你编译环境有关,你换个编译环境试试
wodelingshimingzi 2011-08-11
  • 打赏
  • 举报
回复
我也遇到了类似的错误。。。继续等待高人中
hai040 2009-12-09
  • 打赏
  • 举报
回复
wingdi.cpp 1120行是什么
一般是参数有问题
yudingjun0611 2009-12-09
  • 打赏
  • 举报
回复
那位大侠帮忙解决一下,万分感谢
yudingjun0611 2009-12-09
  • 打赏
  • 举报
回复
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1998 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.

#include "stdafx.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// export WinMain to force linkage to this module

extern int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow);

extern "C" int WINAPI
_tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)
{
// call shared/exported WinMain
return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
}



这里就过不去了好像
The_facE 2009-12-09
  • 打赏
  • 举报
回复
妈呀,噩梦啊。
Assert failed,你这个是运行错误吧?自己找找哪个断言过不去。
yudingjun0611 2009-12-09
  • 打赏
  • 举报
回复
BOOL C_LLk_Dlg::IsWin(void)
{
//搜索整张地图是否有图片剩余
for(int i=0;i<m_nRow*m_nCol;i++)
{
if(m_map[i]!=BLANK_STATE)
{
return false;
}
}
return true;
}


//鼠标消息处理部分






// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR C_LLk_Dlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}

void C_LLk_Dlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default

CDialog::OnLButtonDown(nFlags, point);
//1.计算鼠标点击方块的位置FRONTWIDTH
int x=point.x/FRONTWIDTH+(point.x%FRONTWIDTH?1:0)-1;
int y=point.y/FRONTHEIGHT+(point.y/FRONTHEIGHT?1:0)-1;
//2.在游戏区域内,且该区域不为空
if(x<m_nCol&&y<m_nRow&&m_map[y*m_nCol+x]!=BLANK_STATE)
{
//3.假如未记录第一个方块
if(m_nX1==BLANK_STATE)
{
//4.那就记录第一个方块
m_nX1=x;
m_nY1=y;

//获取程序框架的设备环境
CDC *pWinDC=GetDC();
//临时绘制点中的方块外框
//只绘制屏幕,不载入内存位图
CPen myPen;
CPen *pOldPen;
myPen.CreatePen(PS_SOLID,4,RGB(255,0,0));
pOldPen=pWinDC->SelectObject(&myPen);
//方块外框绘制,线条环绕绘制框架
pWinDC->MoveTo(x*FRONTWIDTH,y*FRONTHEIGHT);
pWinDC->LineTo(x*FRONTWIDTH,(y+1)*FRONTHEIGHT);
pWinDC->LineTo((x+1)*FRONTWIDTH,(y+1)*FRONTHEIGHT);
pWinDC->LineTo((x+1)*FRONTWIDTH,y*FRONTHEIGHT);
pWinDC->LineTo(x*FRONTWIDTH,y*FRONTHEIGHT);
//现场恢复
pWinDC->SelectObject(pOldPen);
}
else
{
//5.判断第二次点击的方块是否已被第一次点击是选取过,并且判断选定两方块上的图案是否相同
if((m_nX1!=x||m_nY1!=y)&&m_map[m_nY1*m_nCol+m_nX1]==m_map[y*m_nCol+x])
{
//6.检测是否可以消除
if(IsLink(m_nX1,m_nY1,x,y))
{
//7.数据清理
m_map[m_nY1*m_nCol+m_nX1]=BLANK_STATE;
m_map[y*m_nCol+x]=BLANK_STATE;
}
}
//8.清空记录方块的值
m_nX1=BLANK_STATE;
m_nY1=BLANK_STATE;
//通知重绘
Invalidate(false);
}
}
if(IsWin())
{
MessageBox("恭喜闯关成功,即将开始新局O(∩_∩)0");
//StartNewGame();
}
}



头文件和cpp文件的内容全部在这里了,我是用mfc的对话框来做的,谢谢了~
yudingjun0611 2009-12-09
  • 打赏
  • 举报
回复
// skyblue_LLkDlg.cpp : implementation file
//

#include "stdafx.h"
#include "skyblue_LLk.h"
#include "skyblue_LLkDlg.h"
#define ROWCOUNT 7 //行数
#define COLCOUNT 12 //列数
#define BLANK_STATE -1 //空区域
#define FRONTWIDTH (39+2) //前面方块的宽度
#define FRONTHEIGHT (39+12) //前面方块的高度
#define BKWIDTH 46 //背景方块的宽度
#define BKHEIGHT 56 //背景方块的高度
#define BKCOLOR RGB(128,128,128) //背景颜色

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
CAboutDlg();


// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA

// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL

// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{

//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// C_LLk_Dlg dialog

C_LLk_Dlg::C_LLk_Dlg(CWnd* pParent /*=NULL*/)
: CDialog(C_LLk_Dlg::IDD, pParent)
{
//初始化行列数
/*m_nRow=ROWCOUNT;
m_nCol=COLCOUNT;
m_map=new int[m_nRow*m_nCol];*/
//{{AFX_DATA_INIT(C_LLk_Dlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
C_LLk_Dlg::~C_LLk_Dlg()
{
//释放动态数组空间
delete[] m_map;
}
//布局整张地图
void C_LLk_Dlg::StartNewGame()
{
//初始化地图
for(int iNum=0;iNum<(m_nCol*m_nRow);iNum++)
{
m_map[iNum]=BLANK_STATE;
}
//布下随机种子
srand(time(NULL));
//生成随机地图
CDWordArray tmpMap; //??????????不懂????????
for(int i=0;i<(m_nCol*m_nRow)/4;i++)
for(int j=0;j<4;j++)
tmpMap.Add(i);
//每次从上面的临时地图中取走一个动物放到地图的空方块上
for(i=0;i<m_nCol*m_nRow;i++)
{
//随机选择一个位置
int nIndex=(int(rand()*0.1+rand()*0.01+rand()))%tmpMap.GetSize();
//将该选定物件放到地图的空方块
m_map[i]=tmpMap.GetAt(nIndex);
//在临时地图中除去该方块
tmpMap.RemoveAt(nIndex);
//更新
Invalidate(TRUE);
}
}


void C_LLk_Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(C_LLk_Dlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(C_LLk_Dlg, CDialog)
//{{AFX_MSG_MAP(C_LLk_Dlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_LBUTTONDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// C_LLk_Dlg message handlers

BOOL C_LLk_Dlg::OnInitDialog()
{
CDialog::OnInitDialog();


CDC *pWinDC=GetDC();


m_mem3DBKDC.CreateCompatibleDC(pWinDC);
m_mem3DBKBmp.LoadBitmap(IDB_BITMAP_3D_FRAMES);
m_mem3DBKDC.SelectObject(&m_mem3DBKBmp);

m_mAnimalDC.CreateCompatibleDC(pWinDC);
m_mem3DBKBmp.LoadBitmap(IDB_BMP_ANIMAL);
m_mAnimalDC.SelectObject(&m_mAnimalBmp);

m_MemDC.CreateCompatibleDC(pWinDC);
m_memBitmap.CreateCompatibleBitmap(pWinDC,
m_nCol*FRONTWIDTH+5,
m_nRow*FRONTHEIGHT+5);
m_MemDC.SelectObject(&m_memBitmap);

// Add "About..." menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization here




return TRUE; // return TRUE unless you set the focus to a control
}



void C_LLk_Dlg::GameDraw(CDC *pDC)
{
//绘制背景色
pDC->FillSolidRect(0,0,m_nCol*FRONTWIDTH+5,m_nRow*FRONTHEIGHT+5,BKCOLOR);
for(int i=0;i<m_nRow;i++)
{
for(int j=0;j<m_nCol;j++)
{
if(m_map[i*m_nCol+j]== BLANK_STATE)
{
continue;
}
//绘制方边框
pDC->BitBlt(j*FRONTWIDTH,i*FRONTHEIGHT,
BKWIDTH,BKHEIGHT,
&m_mem3DBKDC,
0,BKHEIGHT,
SRCCOPY);
//绘制方块
pDC->BitBlt(j*FRONTWIDTH,i*FRONTHEIGHT,
FRONTWIDTH-2,i*FRONTHEIGHT-12,
&m_mAnimalDC,
FRONTWIDTH-2,m_map[i*m_nCol+j]*(FRONTHEIGHT-12),
SRCAND);
pDC->BitBlt(j*FRONTWIDTH,i*FRONTHEIGHT,
FRONTWIDTH-2,i*FRONTHEIGHT-12,
&m_mAnimalDC,
0,m_map[i*m_nCol+j]*(FRONTHEIGHT-12),
SRCPAINT);
}
}
}


void C_LLk_Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}

// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.

void C_LLk_Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}


//判断两个图片是否可以消除的函数
BOOL C_LLk_Dlg::IsLink(int x1,int y1,int x2,int y2)
{
//X直连方式
if(x1==x2)
{
if(X1_link_X2(x1,y1,y2))
return TRUE;
}


//Y直连方式
else if(y1==y2)
{
if(Y1_Link_y2(x1,x2,y1))
return TRUE;
}


//一个折点的连接方式
if(OneCornerLink(x1,y1,x2,y2))
{
return TRUE;
}

//两个折点的连接方式
else if(TwoCorNerLink(x1,y1,x2,y2))
{
return TRUE;
}
return FALSE;
}

//X直连方式
BOOL C_LLk_Dlg::X1_link_X2(int x,int y1,int y2)
{
//保证y1<y2
if(y1>y2)
{
int n=y1;
y1=y2;
y2=n;
}
//直通
for(int i=y1+1;i<=y2;i++)
{
if(i==y2)
return TRUE;
if(m_map[i*m_nCol+x]!=BLANK_STATE)
break;
}
//左通
if(XTHrough(x-1,y1,FALSE)&&XTHrough(x-1,y2,FALSE))
return TRUE;
//右通
if(XTHrough(x+1,y1,TRUE)&&XTHrough(x+1,y2,TRUE))
return TRUE;
return FALSE;
}
//左通和右通
BOOL C_LLk_Dlg::YTHrough(int x,int y,BOOL badd)
{
if(badd)
{
for(int i=x;i<m_nCol;i++)
if(m_map[y*m_nCol+i]!=BLANK_STATE)
return false;
}
else
{
for(int i=0;i<=x;i++)
if(m_map[y*m_nCol+i]!=BLANK_STATE)
return FALSE;
}
return TRUE;
}
//y直连
BOOL C_LLk_Dlg::Y1_Link_y2(int x1,int x2,int y)
{
//保证x1<x2
if(x1>x2)
{
int n=x1;
x1=x2;
x2=n;
}
//直通
for(int i=x1+1;i<=x2;i++)
{
if(i==x2)
return TRUE;
if(m_map[y*m_nCol+i]!=BLANK_STATE)
break;
}
//下通
if(YTHrough(x1,y-1,FALSE)&&YTHrough(x2,y-1,FALSE))
return TRUE;
//上通
if(YTHrough(x2,y+1,TRUE)&&YTHrough(x2,y+1,TRUE))
return TRUE;
return FALSE;
}
//上通和下通
BOOL C_LLk_Dlg::XTHrough(int x,int y,BOOL badd)
{
if(badd)
{
for(int i=0;i<y;i++)
if(m_map[i*m_nCol+x]!=BLANK_STATE)
return false;
}
else
{
for(int i=y;i<=m_nRow;i++)
if(m_map[i*m_nCol+x]!=BLANK_STATE)
return FALSE;
}
return TRUE;
}

//一个直角连接
BOOL C_LLk_Dlg::OneCornerLink(int x1,int y1,int x2,int y2)
{
if(x1>x2)
{
int n=x1;
x1=x2;
x2=n;
n=y1;
y1=y2;
y2=n;
}
if(y2<y1)
{
if(LineY(x1+1,x2,y1)&&LineX(x2,y1,y2+1))
return true;
if(LineY(x2-1,x1,y2)&&LineX(x1,y2,y1-1))
return true;
}
else
{
if(LineY(x1+1,x2,y1)&&LineX(x2,y1,y2-1))
return true;
if(LineY(x2-1,x1,y2)&&LineX(x1,y2,y1+1))
return true;
}
return false;
}
BOOL C_LLk_Dlg::LineY(int x1,int x2,int y)
{
if(x1>x2)
{
int x=x1;
x1=x2;
x2=x;
}
for(int x=x1;x<=x2;x++)
{
if(m_map[y*m_nCol+x]!=BLANK_STATE)
return false;
if(x==x2)
return true;
}
return false;
}
BOOL C_LLk_Dlg::LineX(int x,int y1,int y2)
{
if(y1>y2)
{
int y=y1;
y1=y2;
y2=y;
}
for(int y=y1;y<=y2;y++)
{
if(m_map[y*m_nCol+x]!=BLANK_STATE)
return false;
if(y==y2)
return true;
}
return false;
}

BOOL C_LLk_Dlg::TwoCorNerLink(int x1,int y1,int x2,int y2)
{
//右
int x,y;
for(x=x1+1;x<m_nCol;x++)
{
if (m_map[y1 * m_nCol + x] != BLANK_STATE)
break;
if(OneCornerLink(x,y1,x2,y2))
return true;
}
//左
for(x=x1-1;x>-1;x--)
{
if(m_map[y1*m_nCol+x]!=BLANK_STATE)
break;
if(OneCornerLink(x,y1,x2,y2))
return true;
}
//上
for(y=y1-1;y>-1;y--)
{
if(m_map[y*m_nCol+x1]!=BLANK_STATE)
break;
if(OneCornerLink(x1,y,x2,y2))
return true;
}
//下
for(y=y1+1;y<m_nRow;y++)
{
if(m_map[y*m_nCol+x1]!=BLANK_STATE)
break;
if(OneCornerLink(x1,y,x2,y2))
return true;
}

return false;
}

yudingjun0611 2009-12-09
  • 打赏
  • 举报
回复
// skyblue_LLkDlg.h : header file
//

#if !defined(AFX_SKYBLUE_LLKDLG_H__B493B9E8_1D24_4592_9485_0F1C98FBC3E0__INCLUDED_)
#define AFX_SKYBLUE_LLKDLG_H__B493B9E8_1D24_4592_9485_0F1C98FBC3E0__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

/////////////////////////////////////////////////////////////////////////////
// C_LLk_Dlg dialog

class C_LLk_Dlg : public CDialog
{
// Construction
public:
C_LLk_Dlg(CWnd* pParent = NULL);
virtual ~C_LLk_Dlg();
void StartNewGame();
BOOL IsLink(int ,int ,int ,int );
BOOL X1_link_X2(int ,int ,int );
BOOL Y1_Link_y2(int ,int ,int );
BOOL OneCornerLink(int ,int ,int ,int );
BOOL TwoCorNerLink(int ,int ,int ,int );
BOOL XTHrough(int ,int ,BOOL );
BOOL YTHrough(int ,int ,BOOL );
BOOL LineX(int ,int ,int );
BOOL LineY(int ,int ,int );
BOOL IsWin(void);

// standard constructor

int m_nX1;
int m_nY1;
CDC m_mem3DBKDC;
CBitmap m_mem3DBKBmp;

CDC m_mAnimalDC;
CBitmap m_mAnimalBmp;

CDC m_MemDC;
CBitmap m_memBitmap;
void GameDraw(CDC * pDC);



//Dialog Data
//{{AFX_DATA(C_LLk_Dlg)
enum { IDD = IDD_SKYBLUE_LLK_DIALOG };
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA

// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(C_LLk_Dlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL

// Implementation
protected:
HICON m_hIcon;
int *m_map;//地图数据头指针
int m_nRow;//行数
int m_nCol;//列数

// Generated message map functions
//{{AFX_MSG(C_LLk_Dlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_SKYBLUE_LLKDLG_H__B493B9E8_1D24_4592_9485_0F1C98FBC3E0__INCLUDED_)




=====================================================================================


  • 打赏
  • 举报
回复
单从这几个输出信息,很难辨别错误
如果可能就贴源码
xiaoyuchen3v 2009-12-09
  • 打赏
  • 举报
回复
不是编译报错吧?

MFC里面编译器的报告错误很不准,真的很不准。
不一定就是那错的,很可能是初始化的参数问题

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧