2 barry di barry_di 于 2017.09.15 14:06 提问

MFC CString "="赋值出错

程序大致流程是:有两个输入通道从一个数据源接收数据放入自己的缓存里,再创建线程解析缓存里的数据,用来更新内存对象(这里是pStock对象),两个通道的解析数据的线程函数是同一个函数,下面是线程函数的一部分代码:
pStock = FindStockByCode(csCode);
switch (datatype)
{
case TIME :
{
pStock->m_SrcTime = data;

CString temp = pStock->m_SrcTime.Right(8) ;
pStock->m_csOrignTime = temp; //**运行到这里就出错**
if (pStock->GetTimeFilterVal())//如果该品种需要进行时间参数过滤
{
if (!pStock->CompareTime(pStock->m_SrcTime))
{
CString csLog;
csLog.Format("%s/%s:Lost Because CurTime--%s / SrcTime--%s \n",pStock->GetChName(),pStock->GetSrcCode(),CTime::GetCurrentTime().Format("%H:%M"),data) ;
ShowAndWriteAlarmInfo(csLog) ;//log
return ;
}
}
}
break;
case ... //其他的case语句
}

        程序可以运行一会,pStock->m_csOrignTime = temp; 这一句也会被执行n遍,但是在某一刻再次运行的时候就出错了,错误指到CString对象内部Release()函数

4个回答

wlj1234
wlj1234   2017.09.15 14:54

pStock对应的类,增加析构函数
virtual ~类名(){}
不加的话,成员CString m_SrcTime 存在内存泄漏

shen_wei
shen_wei   Ds   Rxr 2017.09.15 15:14

pStock类的变量,你完全可以在pStock类中进行内部赋值。。而不需要这个临时变量temp。。。

 CString temp = pStock->m_SrcTime.Right(8) ;
pStock->m_csOrignTime = temp; //**运行到这里就出错**
songhailiang020607
songhailiang020607   2017.09.16 11:03

pStock->m_csOrignTime = temp.buffer()函数试试

barry_di
barry_di   2017.09.18 15:17

这个问题我已经解决了,谢谢各位的解答

Csdn user default icon
上传中...
上传图片
插入图片