void CCheckToolDlg::LoadMultiKeyRc(CString cstrPathName)
{
BYTE byLoadData[1024*8] = {0};
ReadFromFile(cstrPathName,byLoadData,1024*8);
memcpy(SEditPos.CheckedRc,byLoadData,1024);
memcpy(nRcContent_MultiKey,byLoadData+1024,1024*7);
for(int i=0; i<1024; i++)
{
for(int j=0; j<7; j++)
{
if(j < MULTI_IDX_MIN)
{
cstrRcContent_MultiKey[i][j] = Hex2CString(nRcContent_MultiKey[i][j]);
}
else
{
cstrRcContent_MultiKey[i][j] = Int2CString(nRcContent_MultiKey[i][j]);
}
}
}
}调试的时候,程序进入上面的函数运行时cstrRcContent_MultiKey[i][j]变量的数据是正确的,为什么从该函数出来后,cstrRcContent_MultiKey[i][j]的数据就没有了呢?studio 2008提示《错误的指针》。
{
BYTE byLoadData[1024*8] = {0};
ReadFromFile(cstrPathName,byLoadData,1024*8);
memcpy(SEditPos.CheckedRc,byLoadData,1024);
memcpy(nRcContent_MultiKey,byLoadData+1024,1024*7);
for(int i=0; i<1024; i++)
{
for(int j=0; j<7; j++)
{
if(j < MULTI_IDX_MIN)
{
cstrRcContent_MultiKey[i][j] = Hex2CString(nRcContent_MultiKey[i][j]);
}
else
{
cstrRcContent_MultiKey[i][j] = Int2CString(nRcContent_MultiKey[i][j]);
}
}
}
}调试的时候,程序进入上面的函数运行时cstrRcContent_MultiKey[i][j]变量的数据是正确的,为什么从该函数出来后,cstrRcContent_MultiKey[i][j]的数据就没有了呢?studio 2008提示《错误的指针》。
nRcContent_MultiKey是个局部变量,函数结束时自然就飞了。
好晕啊,怎么会这样。
程序有时候在debug模式的时候竟然调试不了,实圈圈的断点标志变成了空心圈,消息处理函数也进入不了。
我觉得是程序从V6.0移植到studio2008的问题,但我看不明白.vcproj文件的意思,不知道怎么修改好。
特别是当这个异常是在函数退出时触发的,极有可能是前面某个地方越界了。
在VS里面看不到值,可能只是没有显示出来,实际上是有的。
也有可能是你的 memcpy 造成内存越界访问。
1/CString cstrFilePath = "D:\\CheckTool\\Multikey.txt";
2/InitialMultiKey(cstrFilePath);
3/RefreshDisplay();
4/LastLineDisplay();昨天调试的时候,在1/2/3/4处设断点,还没从InitialMultiKey()退出时,cstrRcContent_MultiKey[1024][7]的数据是ok的,退出后就显示"错误的指针"。
今天调试的时候,把LastLineDisplay()这一行删除,重新编译;调试时,cstrRcContent_MultiKey一直是OK的;然后重新把LastLineDisplay()加到原来位置,cstrRcContent_MultiKey还是OK的。
现在已经没有“错误的指针”这个问题了,程序代码根本就没改。不知道以后还会不会出现。
搞不明白是怎么回事。中邪了!!