初步怀疑是在解析json后 释放内存出问题。请大家帮忙看看?必重谢。释放函数如下:
struct json_struct
{
string tableName;
map<int,string>* name;
vector<vector<string>*>* value;
};
int delete_jsonvector(vector<json_struct*> *vc_json)
{
if(NULL != vc_json)
{
CString ToLog;
size_t SIZE = 0;
vector<json_struct*>::iterator iter = vc_json->begin();
for(; iter != vc_json->end();)
{
for(vector<vector<string>*>::iterator iter2 = (*iter)->value->begin(); iter2 != (*iter)->value->end(); )
{
vector<string>* temp = *iter2;
if(temp != NULL)
{
SIZE = SIZE + _msize(temp);
temp->clear();
delete temp;
temp = NULL;
}
iter2 = (*iter)->value->erase(iter2);
}
if((*iter)->value != NULL)
{;
SIZE = SIZE + _msize((*iter)->value);
(*iter)->value->clear();
delete (*iter)->value;
(*iter)->value = NULL;
} if((*iter)->name != NULL)
{
SIZE = SIZE + _msize((*iter)->name);
(*iter)->name->clear();
delete (*iter)->name;
(*iter)->name = NULL;
} json_struct * temp = (*iter);
iter = vc_json->erase(iter);
if(temp != NULL)
{
SIZE = SIZE + _msize(temp);
delete temp;
temp = NULL;
}
} if(vc_json != NULL)
{
SIZE = SIZE + _msize(vc_json);
delete vc_json;
vc_json = NULL;
}
ToLog.Format("delete %d size", SIZE); WriteLogInfo(ToLog);
}
return 1;
}
struct json_struct
{
string tableName;
map<int,string>* name;
vector<vector<string>*>* value;
};
int delete_jsonvector(vector<json_struct*> *vc_json)
{
if(NULL != vc_json)
{
CString ToLog;
size_t SIZE = 0;
vector<json_struct*>::iterator iter = vc_json->begin();
for(; iter != vc_json->end();)
{
for(vector<vector<string>*>::iterator iter2 = (*iter)->value->begin(); iter2 != (*iter)->value->end(); )
{
vector<string>* temp = *iter2;
if(temp != NULL)
{
SIZE = SIZE + _msize(temp);
temp->clear();
delete temp;
temp = NULL;
}
iter2 = (*iter)->value->erase(iter2);
}
if((*iter)->value != NULL)
{;
SIZE = SIZE + _msize((*iter)->value);
(*iter)->value->clear();
delete (*iter)->value;
(*iter)->value = NULL;
} if((*iter)->name != NULL)
{
SIZE = SIZE + _msize((*iter)->name);
(*iter)->name->clear();
delete (*iter)->name;
(*iter)->name = NULL;
} json_struct * temp = (*iter);
iter = vc_json->erase(iter);
if(temp != NULL)
{
SIZE = SIZE + _msize(temp);
delete temp;
temp = NULL;
}
} if(vc_json != NULL)
{
SIZE = SIZE + _msize(vc_json);
delete vc_json;
vc_json = NULL;
}
ToLog.Format("delete %d size", SIZE); WriteLogInfo(ToLog);
}
return 1;
}
或者将使用的附加DLL在连接器设置中,使用延迟加载试试。
int delete_jsonvector(vector<json_struct*> *vc_json)
{
if(NULL != vc_json)
{
//CString ToLog;
//size_t SIZE = 0;
vector<json_struct*>::iterator iter = vc_json->begin();
for(; iter != vc_json->end();iter ++ )
{
for(vector<vector<string>*>::iterator iter2 = (*iter)->value->begin(); iter2 != (*iter)->value->end();iter2 ++ )
{
if(*iter2 != NULL)
{
delete *iter2;
*iter2 = NULL;
}
}
(*iter)->value->clear();
if((*iter)->value != NULL)
{
delete (*iter)->value;
(*iter)->value = NULL;
} if(*iter != NULL)
{
delete *iter;
*iter = NULL;
}
}
vc_json->clear();
if(vc_json != NULL)
{
delete vc_json;
vc_json = NULL;
}
}
return 1;
}