求助AfxMessageBox("hello")调用时出现的奇怪问题

cc007cc 2010-03-07 02:58:30
小弟初涉MFC程序,
在一个MFC程序中有一个AfxMessageBox("hello")调用时出错,定位到
..\VC98\MFC\SRC\MAP_PP.CPP文件,错误出在红色代码处(如下),此时m_nHashTableSize为:2576980378,nHash为131186.应该是数组越界了,但不知道问题出在哪,不知如何修改。
请高手指点一下,该如何查错排错

void* CMapPtrToPtr::GetValueAt(void* key) const
// find value (or return NULL -- NULL values not different as a result)
{
if (m_pHashTable == NULL)
return NULL;

UINT nHash = HashKey(key) % m_nHashTableSize;

// see if it exists
CAssoc* pAssoc;
for (pAssoc = m_pHashTable[nHash]; pAssoc != NULL; pAssoc = pAssoc->pNext) {
if (pAssoc->key == key)
return pAssoc->value;
}
return NULL;
}
...全文
227 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cc007cc 2010-03-08
  • 打赏
  • 举报
回复
虽然很暴力 不过发现问题所在了 谢谢
引用 7 楼 wizardk 的回复:
引用 6 楼 cc007cc 的回复:试过了 不行引用 5 楼 wizardk 的回复: 所有的delete都错了,需要delete []

代码很长,把你上面的代码一部分一部分的注释掉,看看哪种情况会报错,再详细定位
cc007cc 2010-03-08
  • 打赏
  • 举报
回复
O(∩_∩)O谢谢 不过还是不行
引用 8 楼 xianglitian 的回复:
你试一下用MessageBox
向立天 2010-03-07
  • 打赏
  • 举报
回复
你试一下用MessageBox
WizardK 2010-03-07
  • 打赏
  • 举报
回复
引用 6 楼 cc007cc 的回复:
试过了 不行
引用 5 楼 wizardk 的回复:
所有的delete都错了,需要delete []


代码很长,把你上面的代码一部分一部分的注释掉,看看哪种情况会报错,再详细定位
cc007cc 2010-03-07
  • 打赏
  • 举报
回复
试过了 不行
引用 5 楼 wizardk 的回复:
所有的delete都错了,需要delete []
WizardK 2010-03-07
  • 打赏
  • 举报
回复
所有的delete都错了,需要delete []
cc007cc 2010-03-07
  • 打赏
  • 举报
回复
引用 3 楼 zhou1xp 的回复:
你是上面 开发工具,如果是 VS的 那么就是
AfxMessageBox(_T("hello"));

应该不是这个问题,在函数刚开始AfxMessageBox("hello");是ok的
我现在怀疑是不是内存泄露的问题,但是查不出问题
zhou1xp 2010-03-07
  • 打赏
  • 举报
回复
你是上面 开发工具,如果是 VS的 那么就是
AfxMessageBox(_T("hello"));
cc007cc 2010-03-07
  • 打赏
  • 举报
回复
void CFaceWaveletsDoc::OnFaceRecognition()
{
AfxMessageBox("hello");
// TODO: Add your command handler code here
//读取数字图像的文件头,获取图像的属性参数
LPBITMAPINFOHEADER lpBitmapInfoHeader = (LPBITMAPINFOHEADER)(m_pBitmap+14);
LPBITMAPFILEHEADER lpBitmapFileHeader = (LPBITMAPFILEHEADER)m_pBitmap;
unsigned char *lpData = m_pBitmap + lpBitmapFileHeader->bfOffBits;
unsigned long biHeight = lpBitmapInfoHeader->biHeight;
unsigned long biWidth = lpBitmapInfoHeader->biWidth;
unsigned long biAlign = (biWidth+3)/4 *4;
unsigned long bmSize = biHeight * biAlign;

//图像矩阵坐标与像素数据
int x,y,cur;
unsigned char tempR, tempG, tempB;
float fTempBufforDisp;
short MaxPixVal,MinPixVal,Diff;
short **spOriginData, **spTransData0, **spTransData1;
//分配图像小波变换的数据内存空间
spOriginData = new short* [biHeight];
spTransData0 = new short* [biHeight];
spTransData1 = new short* [biHeight];
m_WvltCoeff = new short * [biHeight];
for(int i = 0; i < biHeight; i ++)
{
spOriginData[i] = new short [biWidth];
spTransData0[i] = new short [biWidth];
spTransData1[i] = new short [biWidth];
m_WvltCoeff[i] = new short [biWidth];
}
//创建图像小波类
CWvltTrans *pTrans;
//从设备的图像缓存中获取原始图像的数据
for(y=0; y<(int)biHeight; y++)
{
for( x=0; x<(int)biWidth; x++)
{
cur = y*biAlign+x;
tempB=lpData[cur];
tempG=lpData[cur+1];
tempR=lpData[cur+2];
spOriginData[biHeight-1-y][x]=(short)(0.3*tempR+0.59*tempG+0.11*tempB); //no problem
}
}
//完成图像的三次小波变换
//pTrans->DWT_TriLayers(spOriginData,spTransData0,spTransData1,biHeight,biHeight/2,biWidth,biWidth/2,3,1.414);

//完成图像的一次小波变换
pTrans->DWT_Once(spOriginData,spTransData0,spTransData1,biHeight,biHeight/2,biWidth,biWidth/2,1,1.414);

MaxPixVal=spTransData1[0][0];
MinPixVal=spTransData1[0][0];
//得到小波系数的极大值和极小值
for( y=0; y<(int)biHeight; y++)
{
for( x=0; x<(int)biWidth; x++)
{
if(MaxPixVal<spTransData1[y][x])
MaxPixVal=spTransData1[y][x];
if(MinPixVal>spTransData1[y][x])
MinPixVal=spTransData1[y][x];

}
}
//计算出小波系数的极值差
Diff=MaxPixVal-MinPixVal;


//将图像的小波数据处理
int pointnum=0;
for(y=0; y<(int)biHeight; y++)
{
for(x=0; x<(int)biWidth; x++)
{
//因为小波变换后的小波系数有可能超过255甚至更多,那么就将
//小波系数的范围映射到0~255区间内,以后出现类似的处理,目的都是一样的
if(y>=10 && x<10)
{
fTempBufforDisp=spTransData1[biHeight-1-y][x];
fTempBufforDisp-=MinPixVal;
fTempBufforDisp*=255;
fTempBufforDisp/=Diff;
mynn->TEST[pointnum++] = fTempBufforDisp;

}
}
}
//AfxMessageBox("hello1");
for (int Year=0; Year<mynn->N; Year++)
{

mynn->TEST[Year] = ((mynn->TEST[Year]-mynn->Min) / (mynn->Max-mynn->Min)) * (HI-LO) + LO;

}
int computeout;
computeout=mynn->TestNet(&(mynn->Net));



for( i = 0; i < biHeight; i ++)
{
delete spOriginData[i] ;
delete spTransData0[i] ;
delete spTransData1[i] ;
delete m_WvltCoeff[i] ;
}
delete spOriginData;
delete spTransData0 ;
delete spTransData1 ;
delete m_WvltCoeff;
AfxMessageBox("hello");
//str.Format("识别结果为第%d幅人脸图像!",computeout);
//str.Format("%d\n",computeout);
//AfxMessageBox(str);
//AfxMessageBox("hello4");


}
WizardK 2010-03-07
  • 打赏
  • 举报
回复
调试或贴出你的代码

16,472

社区成员

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

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

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