VC 控件Combobox 内存释放问题?
在基于对话框的CTestDlg中类中的
CityS是个结构,new出来后跟Combobox控件变量
m_ComboProv绑在一起:
for(int i=0;i<10;i++)
{
CityS *mCityType=new CityS;
mCityType->parent_id=cstr.parent_id;
mCityType->city_id=cstr.city_id;
mCityType->city_name=cstr.city_name;CString provname=cstr.city_name.c_str();
int Index=m_ComboProv.AddString(provname);
m_ComboProv.SetItemDataPtr(Index,(void*)mCityType);//
}但是最后该如何释放?
如果自己写个~CTestDlg()函数,在里面释放,或者在
CTestApp::InitInstance()函数中的else if (nResponse == IDCANCEL)里写如下
的释放语句,都会有断言产生:afxwin2.inl line709
for (int i=0;i<dlg.m_ComboProv.GetCount();i++)
{
CityS *temp=(CityS*)dlg.m_ComboProv.GetItemDataPtr(i);
delete temp;
}
这是怎么回事?

解决方案 »

  1.   

    CTestDlg::OnDestroy()里释放.
    SetItemDataPtr改成SetItemData()就行了.
      

  2.   

    你释放的位置,对话框都释放了,Combobox都析构了
    在对话框的OnClose等释放中释放资源
      

  3.   

    我在OnClose函数中释放了,释放代码如下:
    for (i=0;i<m_ComboProv.GetCount();i++)
    {
    CityS *temp=(CityS*)m_ComboProv.GetItemDataPtr(i);
    delete temp;
    }
    m_ComboProv.ResetContent();//清空原有数据
    但是退出程序后输出窗为什么还会有这些提示:
    The thread 0xED0 has exited with code 2 (0x2).
    The thread 0x2A0 has exited with code 2 (0x2).
    The thread 0xFC8 has exited with code 2 (0x2).
    Detected memory leaks!
    Dumping objects ->
    {6144} normal block at 0x0044E870, 5 bytes long.
     Data: <     > B6 E0 D4 C6 00 

    这些提示应该是内存没有释放吧
    我的释放内存的语句有问题吗?
      

  4.   

    最好不要让控件直接操作内存,可以给ComboBox添加一个vector<CityS>类型成员用于保存数据
    vector<CityS> m_vecData;
    ////////////////////////
    CityS mCityType;
    mCityType.parent_id=cstr.parent_id;
    mCityType.city_id=cstr.city_id;
    mCityType.city_name=cstr.city_name; 
    m_vecData.push_back(mCityType);
    m_ComboProv.SetItemDataPtr(Index,(void*)&m_vecData[Index]);
      

  5.   

    还有个问题:
    启动程序时,任务管理器显示该程序内存10M左右,如果一直不动程序的话
    10M左右这个值没多少改变,但是如果将程序最小化后再打开,
    此时该程序显示的内存为大概2M,
    为什么会差这么多呢,到底哪个才是内存值才是该程序真正占用的内存???
      

  6.   

    请看下面两个链接
    http://hi.baidu.com/dreamyguy/blog/item/afdc3554235f3851d009067f.html
    http://uniqwu.blogbus.com/logs/12511635.html
      

  7.   

    谢谢楼上8楼的,
    这边还有个也是内存的情况:
    调用了这两条语句后,内存增加了1M多(内存使用和虚拟内存都有增加)
    CInternetSession session("HttpClient");
    CHttpFile *pFile=(CHttpFile*)session.OpenURL(Url,1,dwFlags);
    最后调用了如下的语句,但是内存还是没有降下来啊,该怎么让内存释放掉呢?
    pFile->Close(); 
    delete pFile;
    session.Close();