std::list 在Win7 64位中可能存在不兼容 环境:win7 64 开发IDE: VS 2008 代码大概:typedef struct _zone_info { //分区所属的车站ID int zone_station_id; //分区所属设备IP int zone_dev_ip; //分区所属设备ID 号,IP 后两个字节 int zone_dev_no; //分区所属音频芯片的索引1-8 int zone_chip_index; //分区逻辑号类型-默认为0 int zone_logic_type; //分区逻辑号 int zone_logic_no; //分区名字 char zone_name[JH_DEVICE_NAME_LEN+1]; _zone_info & operator = (_zone_info & s ) { memcpy( this, &s, sizeof( s ) ); return *this; } ~_zone_info() { memset( this, 0, sizeof(_zone_info) ); } }STRUCT_ZONE; typedef struct _zone_group_info { int short_cut_index; char short_cut_name[JH_DEVICE_NAME_LEN]; std::deque<STRUCT_ZONE> dequeZone; _zone_group_info & operator = ( _zone_group_info & s ) { short_cut_index = s.short_cut_index; memset( short_cut_name, 0, sizeof(short_cut_name)); strcpy( short_cut_name, s.short_cut_name); dequeZone.clear(); std::deque<STRUCT_ZONE>::iterator itQueZone; for ( itQueZone = s.dequeZone.begin(); itQueZone != s.dequeZone.end(); itQueZone++ ) { dequeZone.push_back( *itQueZone ); } return *this; } ~_zone_group_info() { short_cut_index = -1; memset( short_cut_name, 0, sizeof(short_cut_name)); if ( !dequeZone.empty() ) { dequeZone.clear(); } } }STRUCT_ZONE_GROUP; typedef struct _callstation_info { int nGuid; //设备类型 char type; //设备ID unsigned int no; //设备IP unsigned int ip; //设备网关 unsigned int gateway; unsigned int netmask; int cmd_type; int subway_type; //呼叫站逻辑号 int logic_no; //呼叫站优先级 int priority; //呼叫站所属车站; int station_id; /*话筒增益1-32*/ int mic_gain; /*线路增益1-32*/ int line_gain; /*监听音量 1- 9*/ int lsp_vol; /*数据端口号预留*/ int data_port; /*设备名字*/ char szName[JH_DEVICE_NAME_LEN+1]; std::deque<STRUCT_CALLSTATION_ZONE> dequeZone; STRUCT_ZONE_GROUP zoneGroup[JH_CALLSTATION_GROUP_ZONE_NUM]; _callstation_info & operator = ( _callstation_info & s ) { nGuid = s.nGuid; type = s.type; no = s.no; ip = s.ip; gateway = s.gateway; netmask = s.netmask; cmd_type = s.cmd_type; subway_type = s.subway_type; logic_no = s.logic_no; priority = s.priority; station_id = s.station_id; mic_gain = s.mic_gain; line_gain = s.line_gain; lsp_vol = s.lsp_vol; data_port = s.data_port; memset( szName, 0, sizeof(szName) ); strcpy( szName, s.szName ); dequeZone.clear(); std::deque<STRUCT_CALLSTATION_ZONE>::iterator itZone; for ( itZone = s.dequeZone.begin(); itZone != s.dequeZone.end(); itZone++ ) { dequeZone.push_back( *itZone ); } for ( int i=0; i<JH_CALLSTATION_GROUP_ZONE_NUM; i++) { zoneGroup[i] = s.zoneGroup[i]; } return *this; } ~_callstation_info() { nGuid = 0; type = 0; no = 0; ip = 0; gateway = 0; netmask = 0; cmd_type = 0; subway_type = 0; logic_no = 0; priority = 0; station_id = 0; mic_gain = 0; line_gain = 0; lsp_vol = 0; data_port = 0; memset( szName, 0, sizeof(szName) ); if ( !dequeZone.empty() ) { dequeZone.clear(); } } }STRUCT_CALLSTATION; CArray<STRUCT_CALLSTATION,STRUCT_CALLSTATION&> arrCallstation; 问题:开发的一个程序,在本机上,当执行arrCallstation.RemoveAt()时,出现堆内存释放错误。换为deque后,此现象没有了。并且在使用std::list里,运行在win7 32位机器上,没有问题。
|
|