请教一个内存泄漏问题。


#1

void back(int code,std::string msg,void* ptr) { std::cout << msg;

//printf("%s", msg.c_str()); 

}

这段代码有内存泄漏问题,我用了printf则不会泄漏。很奇怪- -!

msg是通过shared_array 智能指针传递过来的。

void client::recvListBucket(boost::shared_ptrechttp::respone respone,ApiCallBack func) {

	    if(respone->statusCode==200)
	    {
		    //std::string sources=respone->body.get();
            //result::ListBucketResult *buckets=new result::ListBucketResult;
            //上面需要回调中删除,很难保证调用方释放,尝试使用智能指针
            /*boost::shared_ptr<result::ListBucketResult> buckets(new result::ListBucketResult);

		    boost::smatch result;
		    std::string regtxt("<Name>(.*?)</Name>[\\s\\S]*?<CreationDate>(.*?)</CreationDate>");
		    boost::regex rx(regtxt);

		    std::string::const_iterator start,end;
		    start=sources.begin();
		    end=sources.end();

		    while(boost::regex_search(start,end,result,rx))
		    {
                result::Bucket bucket;
                bucket.name=result[1];
                bucket.create_time=result[2];

			    buckets->push_back(bucket);	
			    start=result[0].second;
		    }
			*/
            func(respone->statusCode,respone->body.get(),NULL);


	    }else if(respone->statusCode==403)
	    {
		    func(403,"获取bucket失败,ID或者key错误!",NULL);
	    }
	    else
	    {
		    func(respone->statusCode,"获取bucket失败!",NULL);
	    }

    }
    

}

#2

问题解决了,不是智能指针的问题。

是我不断的海量输出,导致控制台响应不过来,放入了缓存区,然后缓冲区不断变大。

结论:要相信boost,相信party。


#3

http 处理啊! 建议使用 avhttp :slight_smile: