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提示《错误的指针》。

解决方案 »

  1.   

    cstrRcContent_MultiKey[i][j] = Hex2CString(nRcContent_MultiKey[i][j]); //只是个指针指向
    nRcContent_MultiKey是个局部变量,函数结束时自然就飞了。
      

  2.   

    cstrRcContent_MultiKey是什么类型啊,他存的东西是局部变量吧,出了函数当然就没了
      

  3.   

    cstrRcContent_MultiKey在类里面定义为public变量,是CString类型。
      

  4.   

    cstrRcContent_MultiKey是CString类型怎么还用上二维数组了?它是类的对象啊,要想访问它对应的字符串的内存,要调用GetBuffer成员变量,最后别忘了调用ReleaseBuffer
      

  5.   

    我把cstrRcContent_MultiKey定义为全局变量,不属于任何类,就OK了。
    好晕啊,怎么会这样。
      

  6.   

    应该不是变量的作用域啊,我难道会这么弱智吗?
    程序有时候在debug模式的时候竟然调试不了,实圈圈的断点标志变成了空心圈,消息处理函数也进入不了。
    我觉得是程序从V6.0移植到studio2008的问题,但我看不明白.vcproj文件的意思,不知道怎么修改好。
      

  7.   

    有时不一定是你认为的那里出错了。
    特别是当这个异常是在函数退出时触发的,极有可能是前面某个地方越界了。
    在VS里面看不到值,可能只是没有显示出来,实际上是有的。
    也有可能是你的 memcpy 造成内存越界访问。
      

  8.   

    把cstrRcContent_MultiKey的定义写出来,看看
      

  9.   

    CString cstrRcContent_MultiKey[1024][7];
      

  10.   

    在OnInitDialog()里面有:
    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的。
    现在已经没有“错误的指针”这个问题了,程序代码根本就没改。不知道以后还会不会出现。
    搞不明白是怎么回事。中邪了!!