64,654
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
#include<string.h>
#include<assert.h>
#include<stdio.h>
#include<memory>
#include<vector>
#include<deque>
using namespace std;
class buffer
{
private:
deque<vector<char>*> _blocks;
public:
buffer();
~buffer();
char *getData();
bool addData(const char *id,const char *message);
};
buffer::buffer()
{
}
buffer::~buffer()
{
for(int a = 0; a <= _blocks.size(); a++)
{
cout<<_blocks.size()<<endl;
delete _blocks[a];
}
}
char *buffer::getData() //申请了内存需要自己释放
{
if(!_blocks[0]->empty())
{
char *data =new char(_blocks[0]->size());
memmove(data, &_blocks[0]->at(0), _blocks[0]->size());
delete _blocks[0];
_blocks.pop_front();
return data;
}
}
bool buffer::addData(const char *id,const char *message)
{
assert(id != NULL && message != NULL);
assert(strlen(id) < 19);
vector<char> *data = new vector<char>(message,message+strlen(message)+1);
_blocks.push_back(data);
return true;
}
//测试
int main()
{
buffer *read = new buffer;
if(read->addData("55", "fuck") == false) std::cout<<"add erro"<<std::endl;
if(read->addData("55", "55safsdafsad") == false) std::cout<<"add erro"<<std::endl;
std::cout<<"fdsff"<<std::endl;
char *data1 = read->getData();
std::cout<<data1<<""<<std::endl;
// delete data1; //这样不会报错
char *data2 = read->getData();
std::cout<<data2<<std::endl;
// printf("%p",data);
delete data2, data1; //这样会有 invalid fastbin entry (free): 0x0878d288 ***的错误
delete read;
}