| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1936 人关注过本帖
标题:请问这种情况会内存泄露吗?
只看楼主 加入收藏
w906414
Rank: 2
等 级:论坛游民
帖 子:75
专家分:76
注 册:2015-5-29
结帖率:81.82%
收藏
已结贴  问题点数:20 回复次数:9 
请问这种情况会内存泄露吗?
程序代码:
Class tmpClass
{
    private:
        std::vector<std::vector<char> > Map;
    Public:
        tmpClass()
        {
        }
        void test(int num)
        {
            std::vector<std::vector<char> >  tmpMap(1,std::vector<char>(a));
            Map = a;
        }
}
int main()
{
    tmpClass * tmp = new tmpClass();
    while(1)
    {
        tmp->test(1);
    }
    return 0;
}

 假设tmp对象一直不会delete的情况下,这样vector的赋值方式会泄露吗?谢谢各位大佬,用VS的内存检测工具跑好像会泄露,但是看不太明白
 请问如果泄露的话为什么会泄露,如果我想达成这样的赋值方式的话,怎么才可以避免泄露?
 再次谢谢各位不吝赐教,谢谢!
 
搜索更多相关主题的帖子: std char int vector 内存泄露 
2020-04-13 21:23
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
不会 后面的疑问就没解答的必要了
但是 我今天说了特别多的但是
但是 你的a是啥

https://zh.
2020-04-13 22:18
w906414
Rank: 2
等 级:论坛游民
帖 子:75
专家分:76
注 册:2015-5-29
收藏
得分:0 
程序代码:
Class tmpClass
{
    private:
        std::vector<std::vector<char> > Map;
    Public:
        tmpClass()
        {
        }
        void test(int num)
        {
            std::vector<std::vector<char> >  tmpMap(1,std::vector<char>(a));
            Map= a;
        }
}
int main()
{
    tmpClass * tmp = new tmpClass();
    while(1)
    {
        tmp->test(1);
    }
    return 0;
}



[此贴子已经被作者于2020-4-14 09:56编辑过]

2020-04-14 09:19
w906414
Rank: 2
等 级:论坛游民
帖 子:75
专家分:76
注 册:2015-5-29
收藏
得分:0 
以下是引用lin5161678在2020-4-13 22:18:52的发言:

不会 后面的疑问就没解答的必要了
但是 我今天说了特别多的但是
但是 你的a是啥


这是一个资源分配算法。map是需要多次初始化的资源池,每次运行新初始化一个相同结构的资源池a,然后用a赋值给map。把map保存下来,用于资源搜索。
但是担心这么操作,a或map的内存会被泄露。
如果对象一直没有delete,然后test方法运行非常多次,会导致占用内存过大吗?

[此贴子已经被作者于2020-4-14 09:56编辑过]

2020-04-14 09:23
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
以下是引用w906414在2020-4-14 09:23:55的发言:



这是一个资源分配算法。map是需要多次初始化的资源池,每次运行新初始化一个相同结构的资源池a,然后用a赋值给map。把map保存下来,用于资源搜索。
但是担心这么操作,a或map的内存会被泄露。
如果对象一直没有delete,然后test方法运行非常多次,会导致占用内存过大吗?

a是没定义的符号 无法确定是什么东西
后面的疑问无法回答

https://zh.
2020-04-14 10:55
w906414
Rank: 2
等 级:论坛游民
帖 子:75
专家分:76
注 册:2015-5-29
收藏
得分:0 
以下是引用lin5161678在2020-4-14 10:55:42的发言:


a是没定义的符号 无法确定是什么东西
后面的疑问无法回答

程序代码:
Class tmpClass
{
    private:
        std::vector<std::vector<char> > Map;
    Public:
        tmpClass()
        {
        }
        void test(int num)
        {
            std::vector<std::vector<char> >  tmpMap(1,std::vector<char>(num));
            Map= tmpMap;
        }
}
int main()
{
    tmpClass * tmp = new tmpClass();
    while(1)
    {
        tmp->test(1);
    }
    return 0;
}


Map= tmpMap;前面写错了  没有发现。。。
2020-04-14 11:01
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
以下是引用w906414在2020-4-14 11:01:42的发言:


Class tmpClass
{
    private:
        std::vector<std::vector<char> > Map;
    Public:
        tmpClass()
        {
        }
        void test(int num)
        {
            std::vector<std::vector<char> >  tmpMap(1,std::vector<char>(num));
            Map= tmpMap;
        }
}
int main()
{
    tmpClass * tmp = new tmpClass();
    while(1)
    {
        tmp->test(1);
    }
    return 0;
}

Map= tmpMap;前面写错了  没有发现。。。

tmpMap 函数调用完成之后销毁
Map 只有一份
内存最高同时存在2个std::vector<std::vector<char> >

https://zh.
2020-04-14 11:15
w906414
Rank: 2
等 级:论坛游民
帖 子:75
专家分:76
注 册:2015-5-29
收藏
得分:0 
以下是引用lin5161678在2020-4-14 11:15:19的发言:


tmpMap 函数调用完成之后销毁
Map 只有一份
内存最高同时存在2个std::vector<std::vector<char> >

假设map被tmpMap赋值过一次后,有了100Kb的内存。然后函数再运行一次,tmpMap又重新被分配了200Kb的内存并赋值给了Map。
那么Map最终应该会占用200Kb?之前的100Kb会被自动销毁吗?
2020-04-14 11:31
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:20 
回复 8楼 w906414
是的

https://zh.
2020-04-14 11:42
w906414
Rank: 2
等 级:论坛游民
帖 子:75
专家分:76
注 册:2015-5-29
收藏
得分:0 
谢谢
2020-04-14 13:36
快速回复:请问这种情况会内存泄露吗?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035402 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved