首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

奇怪的内存有关问题,string or list 的有关问题

2013-02-19 
奇怪的内存问题,string or list 的问题?#include iostream#include listtypedef std::liststd::strin

奇怪的内存问题,string or list 的问题?
#include "iostream"
#include <list>

typedef std::list<std::string*> STDLIST;
typedef std::list<std::string*>::iterator  STDLIST_ITE;

int main()
{
        STDLIST *test_list = new STDLIST();

        for (int j = 0; j < 100; ++j)
        {
                for (int i = 0; i < 20000; ++i)
                {
                        std::string     *str = new std::string("str");
                        str->reserve(i);

                        //delete str;
                        //str = NULL;
                        test_list->push_back(str);
                }

                unsigned int counter = 0;
                while (!test_list->empty())
                {
                        ++counter;
                        std::string *ptr = test_list->front();
                        delete ptr;
                        ptr = NULL;

                        test_list->pop_front();
                }
                std::cout<<"counter="<<counter<<std::endl;

                test_list->clear();

                if (j%10 == 0)
                {
                        std::cout<<"j="<<j<<",test_list->size="<<test_list->size()<<std::endl;
                        sleep(1);


                }
        }

        if (test_list != NULL)
        {
                delete test_list;
                test_list = NULL;
        }

        int pause;
        std::cin>>pause;
}
[解决办法]

引用:
这个程序很简单,执行到最后时(linux下),程序占用的内存没有释放,不明白原因。

你怎么确定是没有被释放的?感觉lz是误解了linux的内存管理方式
[解决办法]
用valgrind看内存问题
[解决办法]
很久没用c++了,但我感觉应该是str->reserve(i);这句话的原因。

你可以查看下string的new,delete以及reserve的具体操作。既然内存不对,肯定是和内存相关的几个函数出的问题。先看看源代码吧。

[解决办法]
不要把free -m太当回事。
[解决办法]
没问题,c++库内存管理模式的原因。

delete的内存,不一定立即返还给系统。由c++内存分配管理代码维护(也许分配策略属于lazy free的)。


[解决办法]
 string 的reserve的问题

i=0的时候, str指向一个"str"的对象,这个对象的字符串大小是3, 然后又str->reserve(0),

有问题吗???


 

热点排行