奇怪的内存问题,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;
}
[解决办法]
你怎么确定是没有被释放的?感觉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),
有问题吗???