qt在linux下,有什么好的检测内存泄露的工具吗?

晨曦呢 2015-07-25 11:13:47
顺便附代码一段,求大神指点:
void ThreadData::shareMemoryCpy(int sig)//数据拷贝
{
G_GLOBAL_DATA_TABLE *pDataTabel;
G_GLOBAL_DATA_TABLE *pDataBuf;

GglobalDataTable::instance()->m_sharedDataTable.lock();

pDataTabel = static_cast<G_GLOBAL_DATA_TABLE*>( GglobalDataTable::instance()->m_sharedDataTable.data());
pDataBuf = static_cast<G_GLOBAL_DATA_TABLE*>(m_sharedDataBuf.data());

if(sig == 5 || sig == 4 || sig == 3)
{
slotQueueClear();//缓冲区清空
pDataBuf->stat = true;//共享内存数据状态改变
::memcpy(pDataTabel, pDataBuf, sizeof(G_GLOBAL_DATA_TABLE));
ShareSigEmit(sig,m_recvMsg);
GglobalDataTable::instance()->m_sharedDataTable.unlock();
return ;
}

if(pDataTabel->stat == false && m_queueData.isEmpty())//PAD共享内存数据写入GUI共享内存
{
pDataBuf->stat = true;
::memcpy(pDataTabel, pDataBuf, sizeof(G_GLOBAL_DATA_TABLE));
}else if(pDataTabel->stat == false && !m_queueData.isEmpty()) //缓冲区数据写入GUI共享内存,PAD数据写入缓冲区
{
GglobalDataTable::instance()->m_sharedDataTable.unlock();
//缓冲区数据写入GUI共享内存
slotWriteData();
//PAD共享内存数据写入缓冲区
shareDateCache(pDataBuf,sig);
}else if(pDataTabel->stat == true)//PAD共享内存数据写入缓冲区
{
shareDateCache(pDataBuf,sig);
}
GglobalDataTable::instance()->m_sharedDataTable.unlock();
}

void ThreadData::slotWriteData()//缓冲区数据写入共享内存
{
G_GLOBAL_DATA_TABLE *pDataTabel;
GglobalDataTable::instance()->m_sharedDataTable.lock();
pDataTabel = static_cast<G_GLOBAL_DATA_TABLE*>( GglobalDataTable::instance()->m_sharedDataTable.data());
if(pDataTabel->stat)
{
GglobalDataTable::instance()->m_sharedDataTable.unlock();
return;
}

if(m_queueData.isEmpty())
{
GglobalDataTable::instance()->m_sharedDataTable.unlock();
return;
}

m_queueTabelData=m_queueData.dequeue();
::memcpy(pDataTabel, &m_queueTabelData.m_globalData, sizeof(G_GLOBAL_DATA_TABLE));
GglobalDataTable::instance()->m_sharedDataTable.unlock();
}

void ThreadData::shareDateCache(G_GLOBAL_DATA_TABLE *pDataBuf,int SIgType)//缓存数据
{
if(!queueStat)
return;

pDataBuf->stat = true;
::memcpy(&m_queueTabelData.m_globalData, pDataBuf, sizeof(G_GLOBAL_DATA_TABLE));
m_queueTabelData.DataSig = SIgType;
::memcpy(&m_queueTabelData.m_recvBufMsg, &m_recvMsg, sizeof(process_msg));
m_queueData.enqueue(m_queueTabelData);

//缓冲上限为100个数据包
if(m_queueData.count() >= 100)
slotQueueClear();
}
...全文
440 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
彩阳 2015-07-25
  • 打赏
  • 举报
回复
Linux有valgrind,如果是QML项目的话,有QML profiler。

16,212

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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