CString CInventoryView::MyVariantToString(CDBVariant var)
{
/////////////检测内存是否泄漏
#ifdef _DEBUG
CMemoryState oldMemState, newMemState, diffMemState;
oldMemState.Checkpoint();
#endif CString strValue="";
//*
switch(var.m_dwType)
{
case DBVT_STRING:
strValue = *(var.m_pstring);
break;
case DBVT_NULL:
strValue = "";
break;
case DBVT_DATE:
strValue.Format("%d-%2d-%2d",
var.m_pdate->year,
var.m_pdate->month,
var.m_pdate->day);
break;
case DBVT_SHORT:
strValue.Format("%d",var.m_iVal);
break;
case DBVT_LONG:
strValue.Format("%d",var.m_lVal);
break;
default:
strValue="";
}
#ifdef _DEBUG
newMemState.Checkpoint();
if( diffMemState.Difference( oldMemState, newMemState ) )
{
TRACE( "Memory leaked In CInventoryView::MyVariantToString(CDBVariant var)!\n" );
}
#endif
return strValue;
}以上这个函数会内存泄漏,为什么?怎么解决?
{
/////////////检测内存是否泄漏
#ifdef _DEBUG
CMemoryState oldMemState, newMemState, diffMemState;
oldMemState.Checkpoint();
#endif CString strValue="";
//*
switch(var.m_dwType)
{
case DBVT_STRING:
strValue = *(var.m_pstring);
break;
case DBVT_NULL:
strValue = "";
break;
case DBVT_DATE:
strValue.Format("%d-%2d-%2d",
var.m_pdate->year,
var.m_pdate->month,
var.m_pdate->day);
break;
case DBVT_SHORT:
strValue.Format("%d",var.m_iVal);
break;
case DBVT_LONG:
strValue.Format("%d",var.m_lVal);
break;
default:
strValue="";
}
#ifdef _DEBUG
newMemState.Checkpoint();
if( diffMemState.Difference( oldMemState, newMemState ) )
{
TRACE( "Memory leaked In CInventoryView::MyVariantToString(CDBVariant var)!\n" );
}
#endif
return strValue;
}以上这个函数会内存泄漏,为什么?怎么解决?
解决方案 »
- CMainFrame * frm=((CMainFrame*)this->GetActiveWindow();在线程中为什么会出现问题
- 求助!!!如何得到DLL文件中properties的信息?
- 出现这个错误是因为什么?"error LNK2001: unresolved external symbol __imp__CM_Request_Device_EjectA@20"
- 关于窗口的编译问题
- 使用 #import "vbscript.dll" 时出现的问题
- 急!请高手指点关于YUV的问题!
- 大家都来讲:VC中20个 最常用的函数 - 来者给分
- 光标问题(up有分)
- ADO数据绑定Access问题
- 征求穿越代理的源代码!!!!!!!
- 关于多线程中的static变量
- 关于Gina
CString 是变长的字符数组。只是它自己处理分配、释放内存等事情。
CString 对象变长时会多分配出内存。
比如你这样检查就会觉得“内存泄漏”,事实上strTest生命期结束会自己释放内存。
/////////////检测内存是否泄漏
#ifdef _DEBUG
CMemoryState oldMemState, newMemState, diffMemState;
oldMemState.Checkpoint();
#endif
CString strTest;
strTest = "dsgfghgjfujrtyretgfdhf";
//strTest = "";//如果加上这句就又不会弹出下面的对话框了。 #ifdef _DEBUG
newMemState.Checkpoint();
if( diffMemState.Difference( oldMemState, newMemState ) )
{
AfxMessageBox( "Memory leaked " );
}
#endif