0x77fa144b问题,请教高手,谢谢

lgytj 2004-01-08 12:08:29
我在程序中作了按键触发的事件,比如按键盘“A",现在问题是如果我间隔时间长一点,每次按事件都能触发,但如果我快速按就会连续出现下列报错:(
1。(警告框)Debug Assert Failed!
Program: E:\XXXX\XXXX.exe
File:winhand .cpp
line 127
......................
2.(警告框)User Breakpoint called from code at 0x77fa144b
同时调试窗口显示“Second Chance Assertion Failed: File winhand.cpp, Line 229”

那位高手指点一下吧,不胜感谢
...全文
282 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackwuwei 2004-01-08
  • 打赏
  • 举报
回复
User Breakpoint called from code at 0x77fa144b
可能是你的程序里设置了断点,取消所有断点试试
panzhaoping 2004-01-08
  • 打赏
  • 举报
回复
我也者认为
lgytj 2004-01-08
  • 打赏
  • 举报
回复
我也估计是,我的疑问是是不是跟键盘触发有关呢?
zhangcrony 2004-01-08
  • 打赏
  • 举报
回复
内存管理有问题!
lgytj 2004-01-08
  • 打赏
  • 举报
回复
键盘响应的部分
BOOL CPC_VersonDlg::PreTranslateMessage(MSG* pMsg)
{

// TODO: Add your specialized code here and/or call the base class
string sTemp;
char *psNum; //指向sNum的指针
if((pMsg->message)==WM_KEYDOWN)
{

if (sNum.IsEmpty!=0)
{
sTemp.append(sNum);
}
if (((pMsg->wParam)>64 && (pMsg->wParam)<91) || ((pMsg->wParam)>96 && (pMsg->wParam)<123)) //A-Z,a-Z
{
string j;
j=char(pMsg->wParam);
sTemp.append(j);
sNum=sTemp.c_str();
sNum.MakeLower(); //全部转为小写


}
else if((pMsg->wParam)==8) //退格
{
sNum.Delete(sNum.GetLength()-1,1);

}
else if((pMsg->wParam)>48 && (pMsg->wParam)<58) //1-9
{
if(m_bIsShow==TRUE)
{
CString cst=Show;
char *pShow=cst.GetBuffer(cst.GetLength());
if(((pMsg->wParam)-48)<(cst.GetLength()/4))
{
pShow=pShow+((pMsg->wParam)-48-1)*4;
CString ss=Show;
ss=ss.Left(4);
Draw(&m_Show,ss);
}
}
}

if(sNum.GetLength()!=0) //字符串不为空
{
psNum=sNum.GetBuffer(sNum.GetLength());
DoClass *DC=new DoClass();
char *p=DC->GetHZIndex(psNum);
cHanzi=p;
cHanziBK=p;
delete DC;
Show=Draw(&m_DrawText,cHanzi); //这里是个绘图的函数,里面有大量内存分配

//Show=p;
}
m_ShowTxt.SetWindowText(sNum);
}
return CDialog::PreTranslateMessage(pMsg);
}



CString CPC_VersonDlg::Draw(CWnd *Obj, CString &Hanzi)
{


CString csHanzi=Hanzi;
char *pHanzi=Hanzi.GetBuffer(Hanzi.GetLength());
int Index=0; //计数器,显示当前的字的显示索引
string Getchar; //返回显示的汉字的索引
const COLORREF FGColor = RGB(192, 123, 192);
//////绘图//////////////
CDC *pDC=Obj->GetDC();
CDC dcMem;
CBitmap bitmap;

RECT *pRect=new RECT;
Obj->GetClientRect(pRect);
bitmap.CreateCompatibleBitmap(pDC,pRect->right,pRect->bottom);
dcMem.CreateCompatibleDC(pDC);
CBitmap *pOld = dcMem.SelectObject(&bitmap);
dcMem.FillRect(CRect(0,0,pRect->right,pRect->bottom),(CBrush *)dcMem.SelectStockObject(WHITE_BRUSH));
int PageCount=(pRect->right/(PROW*1.5)); //计算 可显示的字数
if ((csHanzi.GetLength()/4)<PageCount)
PageCount=csHanzi.GetLength()/4; //最后一页的处理



for(int i=0;i<PageCount;i++)
{
CString s;
Index++;
CString chanzi=pHanzi;
chanzi=chanzi.Left(4);
Getchar.append(chanzi);

CStringFile *SF=new CStringFile();
chanzi=SF->sHexToBin(chanzi);
SF->Open((LPCSTR)CFile,NULL);
/////////画索引数字///////

//itoa(Index,ss,10);
s.Format("%d",Index);
s="ENCODING "+s;
s=SF->GetHZMap(s,PROW,4);

for(int j=0;j<PROW;j++) //对每一行进行处理
{
CString CStr=s.Left(2);
char *p=s.GetBuffer(s.GetLength());
CStringFile *CSF=new CStringFile();
CStr=CSF->Sixteen2Two(CStr); //得到二进制字符串
int CLen=CStr.GetLength();
/*
for(int k=0;k<CLen;k++) //绘图
{
char *m=CStr.GetBuffer(CStr.GetLength());

if(CStr.Left(1)=="1")
{
POINT *pP=new POINT;
pP->x=pRect->left+k+1+i*PROW*1.5;
//pP->x=pRect->left+k+1+0*PROW*1.5;
pP->y=(pRect->bottom-PROW)/2+j;
//img->DrawText(&m_DrawText,*pP,FGColor);
dcMem.SetPixel(*pP,FGColor);
delete pP;
}

m++;
CStr=m;
}
*/
p=p+2;
s=p;
delete CSF;
}
///////显汉字示

s="ENCODING "+chanzi;
s=SF->GetHZMap(s,PROW,4); //取出该字点阵
for(int jj=0;jj<PROW;jj++) //对每一行进行处理
{
CString CStr=s.Left(4);
char *p=s.GetBuffer(s.GetLength());
CStringFile *CSF=new CStringFile();
CStr=CSF->Sixteen2Two(CStr); //得到二进制字符串
int CLen=CStr.GetLength();
/*
for(int k=0;k<CLen;k++) //绘图
{
char *m=CStr.GetBuffer(CStr.GetLength());
if(CStr.Left(1)=="1")
{
POINT *pP=new POINT;
pP->x=pRect->left+PROW/2+k+1+i*PROW*1.5;
pP->y=(pRect->bottom-PROW)/2+jj;
//img->DrawText(&m_DrawText,*pP,FGColor);
dcMem.SetPixel(*pP,FGColor);
delete pP;
}
m++;
CStr=m;
}
*/
delete CSF;
p=p+4;
s=p;
}

SF->Close();
delete SF;
pHanzi=pHanzi+4;

}
pDC->BitBlt(0,0,pRect->right,pRect->bottom,&dcMem,0,0,SRCCOPY);
bitmap.DeleteObject();
Obj->ReleaseDC(pDC);
Obj->Invalidate();


delete pRect;
delete pDC;
Hanzi=pHanzi;
m_bIsShow=TRUE;

CString p=Getchar.c_str();
return p;


}
bluebohe 2004-01-08
  • 打赏
  • 举报
回复
把你的代码拿出来看看
superS 2004-01-08
  • 打赏
  • 举报
回复
看一下CallStack,应该是内存问题。
Zark 2004-01-08
  • 打赏
  • 举报
回复
处理按键事件的函数中有内存越界问题.

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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