ASIO莫名其妙的double free。。求大神指导

[复制链接]
查看11 | 回复0 | 2021-1-27 06:48:55 | 显示全部楼层 |阅读模式

很奇怪的问题,ubuntu+gcc4.8.1服务器这边session除socket外参数个数是双数就会出现doublefree。。1个或3个都没问题。
但是windows用mingw4.8.1就没问题。求大神指导。。
Session(tcp::socketsocket,TEMP1&t1,TEMP3&t2,TEMP1&t3,TEMP3&t4):
Server:
#include
#include
#include
#include
usingasio::ip::tcp;
classTEMP1
{
};
classTEMP2
{
};
classTEMP3
{
};
classSession:publicstd::enable_shared_from_this
{
public:
explicitSession(tcp::socketsocket,TEMP1&t1,TEMP3&t2,TEMP1&t3,TEMP3&t4):
socket_(std::move(socket)),
temp1_(t1),
temp2_(t2),
temp3_(t3),
temp4_(t4)
{}
~Session(){}
voidstart()
{
do_read();
}
private:
voiddo_read()
{
autoself(shared_from_this());
asio::async_read(socket_,asio::buffer(req_,128),
[this,self](asio::error_codeec,std::size_t)
{
if(!ec)
{
do_packet_msg();
}
});
}
voiddo_packet_msg()
{
sprintf(res_,"%127s","response");
res_[128]='\0';
do_write();
}
voiddo_write()
{
autoself(shared_from_this());
asio::async_write(socket_,asio::buffer(res_,128),
[this,self](asio::error_codeec,std::size_t)
{
if(!ec)
{
do_read();
}
});
}
tcp::socketsocket_;
TEMP1&temp1_;
TEMP3&temp2_;
TEMP1&temp3_;
TEMP3&temp4_;
charreq_[128];
charres_[128];
};

classServer
{
public:
explicitServer(asio::io_service&io_):
acceptor_(io_,tcp::endpoint(tcp::v4(),9999)),
socket_(io_),
temp1(),
temp2(),
temp3(),
temp4()
{
do_accept();
}
private:
voiddo_accept()
{
acceptor_.async_accept(socket_,
[this](std::error_codeec)
{
if(!ec)
{
std::make_shared(std::move(socket_),temp1,temp2,temp3,temp4)->start();
}
do_accept();
});
}
tcp::acceptoracceptor_;
tcp::socketsocket_;
TEMP1temp1;
TEMP3temp2;
TEMP1temp3;
TEMP3temp4;
};

intmain(intargc,char*argv[])
{
try
{
asio::io_serviceio_;
Servers(io_);
io_.run();
}
catch(std::exception&e)
{
std::cerr
Client:
#include
#include
#include
#include"asio.hpp"
usingasio::ip::tcp;
enum{length=128};
intmain(intargc,char*argv[])
{
try
{
if(argc!=3)
{
std::cerr\n";
return1;
}
asio::io_serviceio_service;
tcp::sockets(io_service);
asio::ip::addressaddr;
addr=addr.from_string(argv[1]);
shortn=atoi(argv[2]);
tcp::endpointep(addr,n);
std::cout
分 -->
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行