当前位置: 代码迷 >> 综合 >> std::deque 在Debug 与Release 下执行的不同
  详细解决方案

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

热度:45   发布时间:2024-01-05 00:14:26.0
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,访问操作非法。难道在

  相关解决方案