您的位置:首页 > 产品设计 > UI/UE

std::deque 在Debug 与Release 下执行的不同

2016-04-20 16:32 453 查看
typedef struct _device_callstation_info
{
int nGuid;
/*设备名字*/
char szName[JH_DEVICE_NAME_LEN+1];
std::deque<STRUCT_DEVICE_CALLSTATION_ZONE> * pDequeZone;

_jinhong_device_callstation_info()
{
nGuid = 0;
memset( szName, 0, sizeof(szName) );
pDequeZone = new std::deque<STRUCT_DEVICE_CALLSTATION_ZONE>;
}
_device_callstation_info & operator = ( _device_callstation_info & s  )
{
nGuid = s.nGuid;
memset( szName, 0, sizeof(szName) );
strcpy( szName, s.szName );
pDequeZone->clear();
std::deque<STRUCT_DEVICE_CALLSTATION_ZONE>::iterator itZone;
for ( itZone = s.pDequeZone->begin(); itZone != s.pDequeZone->end(); itZone++ )
{
pDequeZone->push_back( *itZone );/*在此处Debug, Release 下不一样*/
}
return *this;
}
~_device_callstation_info()
{
nGuid = 0;
memset( szName, 0, sizeof(szName) );
if ( pDequeZone && !pDequeZone->empty() )
{
pDequeZone->clear();
delete pDequeZone;
}
}

}STRUCT_DEVICE_CALLSTATION;


然后声明CArray<STRUCT_DEVICE_CALLSTATION,STRUCT_DEVICE_CALLSTATION&> arrCallstation;

STRUCT_DEVICE_CALLSTATION newCallstation;

. 设置值

arrCallstation.Add( newCallstation);

然后重开一个线程取值,也就是在newCallstation销毁后取值。

STRUCT_DEVICE_CALLSTATION newCallstation;

newCallstation = arrCallstation[0];

就在代码标识的地方(Release版本下)出现错误。

如上,声明为指针方式 ,在Debug与Release 下均正常。

std::deque<STRUCT_DEVICE_CALLSTATION_ZONE> * pDequeZone;


如果声明为一般变量,则在Debug下正常,而在Release下不正常。

std::deque<STRUCT_DEVICE_CALLSTATION_ZONE> dequeZone;


在代码的中的不正常的位置已经标识。*itZone,访问操作非法。难道在
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息