关于内存释放,该怎么解决
关于内存释放
想问 for循环内的 string 内存如何释放。还试过resize, erase都没有释放掉
------解决思路----------------------
你是怎么检查有没有内存释放的?
------解决思路----------------------
http://www.cplusplus.com/reference/string/string/
------解决思路----------------------
确实是没释放的,它的内存会越来越大(存放过得最大字符串的长度)。直到对象被销毁了
------解决思路----------------------
string是自己管理内存的
就算你clear或者resize, erase都没用...
你只有自己malloc或new,free或delete才是自己管理内存
你应该改成
一不小心,就把你的代码改成面目全非了....
------解决思路----------------------
string的内存无需关注吧,自己管理的
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的内存无需关注吧,自己管理的