CString sBuf;
CSysWorkPars sysInfo;
memset(&sysInfo,NULL,sizeof(sysInfo));
BOOL bTag=GetSysWorkPars(GTID,sysInfo);
         这是我写在一个函数里的一段代码,当执行完最后的函数GetSysWorkPars的时候,在开头定义的sBuf就无效了。
我知道一定是在GetSysWorkPars函数里出的问题,可有可能时什么引起的呢,如何进行调试呢。望高手指点。

解决方案 »

  1.   

    总发帖:5
    正常结贴:0
    未结贴:4How do you find the sBuf invalid?
      

  2.   

    在watch里查看sBuf 显示CXX0030:Error:expression cannot be evaluated
      

  3.   

    你咋知道无效了呢,
    既然你认为GetSysWorkPars函数出了问题,把GetSysWorkPars函数的代码贴出来啊
      

  4.   

    是啊    我查看内存 sBuf被分配的那块区域好像也没被更改过   所以奇怪。有可能时什么引起的,怎么调试啊。   我以进到GetSysWorkPars函数里在watch中就看不到sBuf变量了。高手们啊    帮帮我吧
      

  5.   

    因为sBuf没有被使用过
    所以你的这行代码被优化掉了
    所以sBuf调试的时候根本不存在
      

  6.   

    在watch里查看sBuf 显示CXX0030:Error:expression cannot be evaluated
    .........................
    sBuf根本就没有复直嘛
      

  7.   

    就算是没有被赋值,那也该显示出一个值,哪怕是乱码
    但他这种情况是,这个sBuf变量调试器找不到
      

  8.   

    后面是使用了  函数太大 就没全贴出来。
    我在后边sBuf.Format("%s","dsadsa"); 报错了。
      

  9.   

    后面是使用了  函数太大 就没全贴出来。
    我在后边sBuf.Format("%s","dsadsa"); 报错了。
      

  10.   

    不懂
    CString sBuf;放到
    BOOL bTag=GetSysWorkPars(GTID,sysInfo);
    的后面试试
      

  11.   

    那不贴出来只能你自己检查了
    不过你可以CString sBuf;
    CSysWorkPars sysInfo;
    把这两行上下掉下再试试,
    估计应该就是你那个函数的的问题,越界操作了
      

  12.   

    你确定你在后面使用的是这边的sBuf?
    在GetSysWorkPars函数里面使用的?
      

  13.   

    确定是这个错误?你前面有用到CString sBuf吗?
      

  14.   

    CString sBuf;放到BOOL bTag=GetSysWorkPars(GTID,sysInfo);的后面是可以  想知道什么原因引起的。 
    操作越界是什么意思,怎么判断是否越界。
    13楼:我确定在后边使用了 GetSysWorkPars函数里不能用到外边的sBuf变量。
      

  15.   

    BOOL CUserSetting::GetSysWorkPars(unsigned int GTID,CSysWorkPars &info)
    {
    int i;
    CPtrArray rd;
    CSysWorkPars *pWork;
    AfxGetSQLMng()->GetSysWorkInfo(rd,GTID);
    if (!rd.GetSize())
    return 0;
    for(i=0;i<rd.GetSize();i++)
    {
           pWork=(CSysWorkPars *)rd.GetAt(i);
       info=*pWork;
       delete [] pWork;
    }
    pWork=NULL;
    rd.RemoveAll();

    AfxGetSQLMng()->GetRealIP(rd,GTID);
    if (!rd.GetSize())
    return 0;
    CIPSetting *pIP;
    for(i=0;i<rd.GetSize();i++)
    {
    pIP=(CIPSetting *)rd.GetAt(i);
    memcpy(info.IpDef,pIP,sizeof(info.IpDef));
    delete [] pIP;
    }
        pIP=NULL;
    rd.RemoveAll();
    AfxGetSQLMng()->GetCalibrate5DotsPars(rd,GTID);
    if (!rd.GetSize())
    return 0;
    CCalibrate5DotsPars *pCa;
    for(i=0;i<rd.GetSize();i++)
    {
    pCa=(CCalibrate5DotsPars *) rd.GetAt(i);
    info.sLoadCal=*pCa;
    delete[] pCa;
    } pCa=NULL;
    rd.RemoveAll();
    AfxGetSQLMng()->GetCalibratePars(rd,GTID);
    if (!rd.GetSize())
    return 0;
    CCalibratePars *PCaa;
    for(i=0;i<rd.GetSize();i++)
    {
    PCaa=(CCalibratePars *)rd.GetAt(i);
    info.sPosCal=*PCaa;
    delete [] PCaa;
    }
    PCaa=NULL;
    rd.RemoveAll(); AfxGetSQLMng()->GetNotifySetting(rd,GTID);
    if(!rd.GetSize())
    return 0;
    CNotifySetting *pNot;
    int s=rd.GetSize();
    for(i=0;i<rd.GetSize();i++)
    {
    pNot= (CNotifySetting *) rd.GetAt(i);
    info.sNSDef[i]=*pNot;
    delete [] pNot;
    }
    pNot=NULL;
    rd.RemoveAll(); return 1;
    }
    代码   哪位高人帮看看
      

  16.   

    CString sBuf;
    CSysWorkPars sysInfo;
    memset(&sysInfo,NULL,sizeof(sysInfo));
    BOOL bTag=GetSysWorkPars(GTID,sysInfo);
    sBuf.Format("%s","dsadsa");
    紧挨着使用的 ,中间没操作过sBuf
      

  17.   

    for(i=0;i<rd.GetSize();i++)
    {
    pNot= (CNotifySetting *) rd.GetAt(i);
    info.sNSDef[i]=*pNot;
    delete [] pNot;
    }
    这里info.sNSDef[i]=*pNot;i会不会超过info.sNSDef定义的大小
      

  18.   

    看看CSysWorkPars 这个类的定义呢