CStringArray中存储的是CString的对象,不过,我没有存储CString的指针,这就造成使用CStringArray的RemoveAll()函数时并不能真正释放掉CString对象的内容,使得它始终占有内存直到程序退出。
请问,我如何在调用RemoveAll()的同时清理CSTringArray数组中所有的对象的内存?谢谢!

解决方案 »

  1.   

    逐个CString取出,然后Empty总可以了吧。
      

  2.   

    按MSDN的说法,应该已经删除了When a CString array is deleted, or when its elements are removed, string memory is freed as appropriate.
      

  3.   

    CArray是一个自动模板类,如果是CString类型的,CString内部会自动处理.
    当你构造了一个CString的实例以后,他的生存期随着你的构建的环境而自动释放.
      

  4.   

    : gufengduyu赞同你的说法!
      

  5.   

    "When a CString array is deleted"是指把CStringArray对象删除?而不是调用它的RemoveAll()来是否内存?
      

  6.   

    msdn上有个例子:
    // example for CObArray::RemoveAllCObArray array;
    CAge* pa1;
    CAge* pa2;array.Add( pa1 = new CAge( 21 ) ); // Element 0
    array.Add( pa2 = new CAge( 40 ) ); // Element 1
    ASSERT( array.GetSize() == 2 );
    array.RemoveAll(); // Pointers removed but objects not deleted.
    ASSERT( array.GetSize() == 0 );
    delete pa1;
    delete pa2;  // Cleans up memory.
      

  7.   

    to: yangyong1980919(山那边的小子) 
    msdn中的例子正是使用了指针,而我,没有使用指针!
      

  8.   

    当CStringArray生存期结束时,应该能自动删除。
      

  9.   

    我测了一下,认为RemoveAll()函数在释放内存方面没有什么问题,但是内存狂长的问题出现在为CStringArray对象分配空间的时候!!微软的破玩意!测试过程是这样的,建立一个基于dialog的对话框,其中一个按钮用来为CStringArray申请内存,如下:
    void CTestarrayDlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here
    CString sStr = "Use this to eat memories!";
    int nSize = 0;
    //nSize = m_arrTest.GetSize();
    for(int n=nSize; n<nSize+1000000; n++)
    {
    m_arrTest.InsertAt(n, sStr);
    }
    }另一个按钮用来释放内存:
    void CTestarrayDlg::OnButton2() 
    {
    // TODO: Add your control notification handler code here
    m_arrTest.RemoveAll();
    m_arrTest.SetSize(0, 1000);
    }测试发现,多次配合点击button1和button2,发现内存是持续增长的,而每次button2释放的内存数量则基本是固定的一个数目,这个数目是与字符串实际消耗的大小一致的。怎么办呢?CStringArray到底还能不能用?
      

  10.   

    CStringArray用于字符串数组,内部已经有释放代码。
    由于CString总是分配和释放空间,可能造成内存碎片。解决的方法是用托管代码。
      

  11.   

    CStringArrat原来有这么多的问题,用起来还真的小心呀,可这个类确实很好用啊 ,到底有没有好的解决方法啊???
    gzgzgzgzgzgzgzgzgzgzgzgzgzgzgzggzgzgz
    xx~!~!~!
      

  12.   

    我在使用中也发现这种问题,对于大数据量长时间运行的程序,还是不要使用CStringArray了,改用Vector比较好。