关于内存释放

老王爱上猫 2014-10-16 10:46:22

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都没有释放掉
...全文
127 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
starytx 2014-10-16
  • 打赏
  • 举报
回复
string的内存无需关注吧,自己管理的
版主大哥 2014-10-16
  • 打赏
  • 举报
回复
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;
    }
}
一不小心,就把你的代码改成面目全非了....
勤奋的小游侠 2014-10-16
  • 打赏
  • 举报
回复
引用 2 楼 bjym1987 的回复:
任务管理器 里面看的
引用 1 楼 lovesmiles 的回复:
你是怎么检查有没有内存释放的?
string它是从内存池里面申请的内存,用完了就放回给池子。 这个池子的内存是不会还给系统的。不同的实现不一样。 你在任务管理器观察的方式也太粗糙了。
老王爱上猫 2014-10-16
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
http://www.cplusplus.com/reference/string/string/
赵老湿 你就不能直接告诉我如何释放?
铖邑 2014-10-16
  • 打赏
  • 举报
回复
确实是没释放的,它的内存会越来越大(存放过得最大字符串的长度)。直到对象被销毁了
老王爱上猫 2014-10-16
  • 打赏
  • 举报
回复
任务管理器 里面看的
引用 1 楼 lovesmiles 的回复:
你是怎么检查有没有内存释放的?
勤奋的小游侠 2014-10-16
  • 打赏
  • 举报
回复
你是怎么检查有没有内存释放的?

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧