- 论坛徽章:
- 0
|
if ( it == aHmap.end() )
{
IVR_Data_List *node;
user u1;
u1.do_finish = false;
u1.time = strLineResult[17];
node = new IVR_Data_List;
strcpy( node->IVRD.CLI,strLineResult[13].c_str() );
strcpy( node->IVRD.DNR,strLineResult[12].c_str() );
node->IVRD.Last_time = atol(strLineResult[17].c_str());
node->IVRD.Counter = 1 ;
node->next = NULL;
u1.IVL_Head = node;
aHmap[strLineResult[12]] = u1;
}
else
{
IVR_Data_List *node;
node = it->second.IVL_Head;
bool FOUND = false;
while (node != NULL)
{
if ( string(node->IVRD.CLI) == strLineResult[13] )
{
node->IVRD.Last_time = atol(strLineResult[17].c_str());
node->IVRD.Counter++;
FOUND = true;
break;
}
node = node->next;
}
if (!FOUND) //内存泄露报在此if中
{
IVR_Data_List *newnode;
newnode = new IVR_Data_List; //???
strcpy( newnode->IVRD.CLI,strLineResult[13].c_str() );
strcpy( newnode->IVRD.DNR,strLineResult[12].c_str() );
newnode->IVRD.Last_time = atol(strLineResult[17].c_str());
newnode->IVRD.Counter = 1 ;
newnode->next=NULL;
node = newnode;
}
it->second.do_finish = false;
}//endif ( it == aHmap.end() )
// valgrind -q --tool=memcheck --leak-check=full ./SServer -debug
==2961==
==2961== 64 bytes in 1 blocks are definitely lost in loss record 1 of 3
==2961== at 0x401AD61: operator new(unsigned) (vg_replace_malloc.c:224)
==2961== by 0x804BDA1: CServer::Start_mcn() (in /home/mcn/lib/SServer)
==2961== by 0x804EDA9: main (in /home/mcn/lib/SServer)
弄糊涂了都 请高手指点下
struct IVR_Data
{
char CLI[26] ;
char DNR[26] ;
unsigned long Last_time ;
unsigned long Counter ;
};
struct IVR_Data_List
{
IVR_Data IVRD;
IVR_Data_List* next;
};
struct user
{
bool do_finish;
string time;
IVR_Data_List* IVL_Head;
};
[ 本帖最后由 senic 于 2008-6-12 17:47 编辑 ] |
|