程序大致流程是:有两个输入通道从一个数据源接收数据放入自己的缓存里,再创建线程解析缓存里的数据,用来更新内存对象(这里是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()函数
这个问题我已经解决了,谢谢各位的解答
pStock对应的类,增加析构函数
virtual ~类名(){}
不加的话,成员CString m_SrcTime 存在内存泄漏
pStock类的变量,你完全可以在pStock类中进行内部赋值。。而不需要这个临时变量temp。。。
CString temp = pStock->m_SrcTime.Right(8) ;
pStock->m_csOrignTime = temp; //**运行到这里就出错**
pStock->m_csOrignTime = temp.buffer()函数试试