定义一个vector:
typedef struct _SEED_TOP_
{
std::string m_Range;//192.168.1.1_192.168.1.255,192.168.2.1-192.168.2.255//每对起始结束ip之间用“,”分隔
int m_scansubnet;//true扫描子网,false不扫描子网,只扫描骨干网
int m_networkdevice; //invalid
int m_server; //invalid
int m_scanicmp; //true表示需要拓扑开了icmp的设备,false不需要拓扑
std::vector<std::string> m_snmpdevicelist; //“startIp”,”endIp”,”community”,”retry”,”timeout”
std::string m_pingset; //true,timeout,times //true设置ping,false不设置ping,这时就没有timeout和times参数,timeout表示超时单位为毫秒,times表示ping次数
std::string m_routerdevice; //invalid
int m_topologyalgorithm; //invalid
_SEED_TOP_& operator = (_SEED_TOP_& value)
{
m_Range = value.m_Range;
m_scansubnet = value.m_scansubnet;
m_server = value.m_server;
m_scanicmp = value.m_scanicmp;
if(!m_snmpdevicelist.empty())
{
m_snmpdevicelist.clear();
}
m_snmpdevicelist.assign(value.m_snmpdevicelist.begin(),value.m_snmpdevicelist.end());
m_pingset = value.m_pingset;
return *this;
}
_SEED_TOP_(const com::topology::SEEDTOP value)
{
m_Range = value.mRange;
m_scansubnet = value.mscansubnet;
m_server = value.mserver;
m_scanicmp = value.mscanicmp;
if(!m_snmpdevicelist.empty())
{
m_snmpdevicelist.clear();
}
m_snmpdevicelist.assign(value.msnmpdevicelist.begin(),value.msnmpdevicelist.end());
m_pingset = value.mpingset;
}
_SEED_TOP_()
{
}
}SEED_TOP;
typedef struct __THREAD_SEED__
{
int retry;
int timeout;
std::string seed;
int depth;
std::vector<std::string> community;
std::vector<IP_ADDR> ip;
int scansubnet;
int icmp;
std::vector<SNMP_LIST_INFO> snmplist;
PING_SET_INFO pinginfo;
int Init(void * data)
{
SEED_TOP* info = (SEED_TOP * )data;
scansubnet = info->m_scansubnet;
icmp = info->m_scanicmp;
//初始化起始IP
std::string seperator;
std::vector<IP_ADDR> ipaddr;
while(memcmp((seperator = Get_Subvalue(info->m_Range,',')).c_str(),"_",1) != 0)
{
std::string startip;
std::string endip;
IP_ADDR l_ip;
startip = Get_Subvalue(seperator,'-');
endip = Get_Subvalue(seperator,'-');
l_ip.m_num = 2;
memcpy(l_ip.m_ip,startip.c_str(),startip.size());
l_ip.next = (IP_ADDR*)malloc(sizeof(IP_ADDR));
if(l_ip.next != NULL)
{
memset(l_ip.next,0,sizeof(IP_ADDR));
memcpy(l_ip.next->m_ip,endip.c_str(),endip.size());
}
else
{
return -2;
}
std::string tmp = startip;
tmp += '-';
tmp += endip;
/**//*if(ip.size()<=0)
{
ip.resize(10);
ip.clear();
}
else if(ip.size() >= ip.capacity())
{
ip.resize(ip.capacity()*2);
}*/
ip.push_back(l_ip);
if(memcmp(tmp.c_str(),info->m_Range.c_str(),info->m_Range.size()) == 0)
{
break;
}
}
//初始化snmp链表
SNMP_LIST_INFO perinfo;
memset((char *)&perinfo,0,sizeof(SNMP_LIST_INFO));
std::vector<std::string> seedlist(info->m_snmpdevicelist.begin(),info->m_snmpdevicelist.end());
std::vector<std::string>::iterator list_iter = seedlist.begin();
for(;list_iter != seedlist.end();++list_iter)
{
std::string devicelist = (*list_iter);
std::string startip = Get_Subvalue(devicelist,',');
std::string endip = Get_Subvalue(devicelist,',');
std::string list_community = Get_Subvalue(devicelist,',');
std::string list_retry = Get_Subvalue(devicelist,',');
std::string list_timeout = Get_Subvalue(devicelist,',');
if((memcmp(startip.c_str(),"_",1) == 0)||
(memcmp(endip.c_str(),"_",1) == 0)||
(memcmp(list_community.c_str(),"_",1) == 0)||
(memcmp(list_retry.c_str(),"_",1) == 0)||
(memcmp(list_timeout.c_str(),"_",1) == 0))
{
return -1;
}
perinfo.community = list_community;
perinfo.retry = atol(list_retry.c_str());
perinfo.timeout = atol(list_timeout.c_str());
perinfo.ip.m_num = 2;
memcpy(perinfo.ip.m_ip,startip.c_str(),startip.size());
perinfo.ip.next = (IP_ADDR*)malloc(sizeof(IP_ADDR));
if(perinfo.ip.next == NULL)
{
return -2;
}
memset(perinfo.ip.next,0,sizeof(IP_ADDR));
memcpy(perinfo.ip.next->m_ip,endip.c_str(),endip.size());
perinfo.ip.next->next = NULL;
snmplist.push_back(perinfo);
}
//初始化pingset结构
std::string info_ping = info->m_pingset;
std::string sustain_icmp = Get_Subvalue(info_ping,',');
std::string c_timeout = Get_Subvalue(info_ping,',');
std::string c_retry = Get_Subvalue(info_ping,',');
if((memcmp(sustain_icmp.c_str(),"_",1) == 0)||
(memcmp(c_timeout.c_str(),"_",1) == 0)||
(memcmp(c_retry.c_str(),"_",1) == 0))
{
return -3;
}
pinginfo.icmp = (memcmp(sustain_icmp.c_str(),"true",4) == 0)?1:0;
pinginfo.retry = atol(c_retry.c_str());
pinginfo.timeout = atol(c_timeout.c_str());
return 0;
}
}THREAD_SEED;
THREAD_SEED seed.Init(&tmpinfo);
如果是release则在Init的ip.push_back(l_ip);行发生异常,但是debug版本就没有任何事,不知道是啥原因;
高手指导!!C 运行时错误
__declspec(noinline)
void __cdecl _CRT_DEBUGGER_HOOK(int _Reserved)
{
/* assign 0 to _debugger_hook_dummy so that the function is not folded in retail */
(_Reserved);
_debugger_hook_dummy = 0;
}
posted on 2009-06-18 17:41
Super- 阅读(3634)
评论(2) 编辑 收藏 引用