list的front挂掉

zyu00 2018-08-21 03:42:03
PACKET_INFO_8K* packet = NULL;
if (m_PacketSemaphore.acquire() == 0)
{
if(m_PacketList.size() > 0)
{
ACE_GUARD_RETURN(ACE_Recursive_Thread_Mutex,mon,m_SynPacketLock,-1);
packet = m_PacketList.front();
m_PacketList.pop_front();
}
......
dump文件显示在packet = m_PacketList.front();行!_invalid_parameter_noinfo+c 挂掉
...全文
279 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyu00 2018-08-23
  • 打赏
  • 举报
回复
还有人帮忙看看吗?
sghcpt 2018-08-22
  • 打赏
  • 举报
回复
引用 10 楼 jiangzyu 的回复:
[quote=引用 9 楼 sghcpt 的回复:]
还是哪里报错???

是的[/quote]
那就看看是否其它地方使用到m_PacketList操作之前没有加锁操作了或者你上面加锁的代码是否真的可用了。。
zyu00 2018-08-22
  • 打赏
  • 举报
回复
引用 9 楼 sghcpt 的回复:
还是哪里报错???

是的
sghcpt 2018-08-22
  • 打赏
  • 举报
回复
还是哪里报错???
zyu00 2018-08-22
  • 打赏
  • 举报
回复
引用 7 楼 sghcpt 的回复:
或者代码改为下面,前提是ACE_GUARD_RETURN是加锁操作:
ACE_GUARD_RETURN(ACE_Recursive_Thread_Mutex,mon,m_SynPacketLock,-1);
if(m_PacketList.size() > 0)
{
packet = m_PacketList.front();
m_PacketList.pop_front();
}

试了也不行
sghcpt 2018-08-21
  • 打赏
  • 举报
回复
或者代码改为下面,前提是ACE_GUARD_RETURN是加锁操作:
ACE_GUARD_RETURN(ACE_Recursive_Thread_Mutex,mon,m_SynPacketLock,-1);
if(m_PacketList.size() > 0)
{
packet = m_PacketList.front();
m_PacketList.pop_front();
}
sghcpt 2018-08-21
  • 打赏
  • 举报
回复
ACE_GUARD_RETURN(ACE_Recursive_Thread_Mutex,mon,m_SynPacketLock,-1)加锁了没有用的,也判断不了这时m_PacketList列表中是否为空的。你应该在m_PacketList.front代码前做一个是否为空判断吧。。。
sghcpt 2018-08-21
  • 打赏
  • 举报
回复
只有一个线程操作m_PacketList变量??
zyu00 2018-08-21
  • 打赏
  • 举报
回复
引用 3 楼 sghcpt 的回复:
楼主,m_PacketList保存的信息,用在多线程中?如果是,要加多线程访问同步机制,例如加互斥锁之类的。可能m_PacketList变量在调用front函数时,已经为空了。而当列表为空时调用这个front函数,行为是不可预测的。。来自std list中对front函数的说明:
Access first element
Returns a reference to the first element in the list container.
Unlike member list::begin, which returns an iterator to this same element, this function returns a direct reference.
Calling this function on an empty container causes undefined behavior.


调用svc只起了一个线程,而且ACE_GUARD_RETURN(ACE_Recursive_Thread_Mutex,mon,m_SynPacketLock,-1)加锁了
sghcpt 2018-08-21
  • 打赏
  • 举报
回复
楼主,m_PacketList保存的信息,用在多线程中?如果是,要加多线程访问同步机制,例如加互斥锁之类的。可能m_PacketList变量在调用front函数时,已经为空了。而当列表为空时调用这个front函数,行为是不可预测的。。来自std list中对front函数的说明:
Access first element
Returns a reference to the first element in the list container.
Unlike member list::begin, which returns an iterator to this same element, this function returns a direct reference.
Calling this function on an empty container causes undefined behavior.
zyu00 2018-08-21
  • 打赏
  • 举报
回复
大神帮忙看看
zyu00 2018-08-21
  • 打赏
  • 举报
回复
用的debugdiag analysis工具分析的dump文件

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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