关于内存释放,该怎么解决

关于内存释放
本帖最后由 bjym1987 于 2014-10-16 10:47:25 编辑

typedef struct _A
{
string str;
}A;

int main(int argc, char* argv[])
{
A a;
a.str = "1";
        list<A> list_A;
list_A.assign(1000000, a); 
//list<A>().swap(list_A); 可释放内存
list<A>::iterator it;
for (it = list_A.begin(); it != list_A.end(); ++it)
{
it->str.clear(); //没释放
string().swap(it->str);//没释放
}
}

想问 for循环内的 string 内存如何释放。还试过resize, erase都没有释放掉
------解决思路----------------------
你是怎么检查有没有内存释放的?
------解决思路----------------------
http://www.cplusplus.com/reference/string/string/
------解决思路----------------------
确实是没释放的,它的内存会越来越大(存放过得最大字符串的长度)。直到对象被销毁了
------解决思路----------------------
string是自己管理内存的

就算你clear或者resize, erase都没用...

你只有自己malloc或new,free或delete才是自己管理内存


你应该改成

typedef struct _A
{
    char* pszData;
    int nLen;
}A;
 
int main(int argc, char* argv[])
{   
    list<A> list_A;

    for(int i = 0; i < 1000000,i++)
    {
        A a;
        a.pszData = new char[100];
        a.nLen = 100;
        memset(a.pszData,0,100);
        strcpy(a.pszData,"1");
        list_A.pushback(a);
    }
    //list<A>().swap(list_A); 可释放内存
    list<A>::iterator it;
    for (it = list_A.begin(); it != list_A.end(); ++it)
    {
        delete[] it.pszData;
        it.pszData = NULL;
        it.nLen = 0;
    }
}


一不小心,就把你的代码改成面目全非了....
------解决思路----------------------
string的内存无需关注吧,自己管理的