关于gflags查找内存泄漏的问题

jy20jy20 2013-12-30 12:28:14

void GameLogic::HandleClientMessage( void *_SocketMsg)
{
//exclusiveLockLogic exLock(_mutexLogic);

unsigned int socketIndex;
datapacket::CData recv;
int SocketSize;

SocketMsg *sMsg=(SocketMsg *)_SocketMsg;

socketIndex=sMsg->sessionID;
recv.ParseFromString(sMsg->dataFlow.get());
SocketSize=sMsg->SocketSize;

if (sMsg != NULL)
{
delete sMsg;
sMsg = NULL;
}
}
////////////////////////////////////////////////////////////////////////////
//读取客户端消息
void GameSvr::readHandler(unsigned socketIndex, char* data, size_t size)
{
//互斥锁
exclusiveLockSvr exLock(_mutexSvr);

SocketMsg *sMsg=new SocketMsg();
sMsg->sessionID = socketIndex;
sMsg->SocketSize = size;

boost::shared_ptr<char> buffer((char*) malloc(size));
memcpy(buffer.get(), data, size);

sMsg->dataFlow = buffer;

g_GameLogic.HandleClientMessage((void *)sMsg);

if (sMsg != NULL)
{
//delete sMsg;
sMsg = NULL;
}
}


/////////////////////////////////////////////////////////////////
用gflag gflags /p /enable *.exe /full

recv.ParseFromString(sMsg->dataFlow.get());一直中断在这行 Output :First-chance exception in *.exe 尝试过用各种方法 不传void * 改成参数等等 也是这行中断 请问是否有内存溢出之类的问题 感激不尽
...全文
1271 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdzfjfhnui 2014-02-13
  • 打赏
  • 举报
回复
不过一看你这个代码写的也是很挫啊
jdzfjfhnui 2014-02-13
  • 打赏
  • 举报
回复
boost::shared_ptr<char> buffer((char*) malloc(size)); 这个内存你释放的时候就不对了,因为不是new的,你也没有指定析构handler,莫非boost的shared_ptr有那么英明知道用free释放?
oyljerry 2013-12-30
  • 打赏
  • 举报
回复
单步调试,检查一下指针地方
ouyh12345 2013-12-30
  • 打赏
  • 举报
回复
很像缓冲器溢出 查看memcpy(buffer.get(), data, size);是否正确

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧