请问这个gdb提示的错误是什么原因?(pure virtual method called)

qhgary 2004-12-16 06:07:48
pure virtual method called

Program received signal SIGABRT, Aborted.
[Switching to Thread 65541 (LWP 5042)]
0x407e05c1 in kill () from /lib/libc.so.6
(gdb) up
#1 0x4069258d in pthread_kill () from /lib/libpthread.so.0
(gdb) up
#2 0x4069290b in raise () from /lib/libpthread.so.0
(gdb) up
#3 0x407e0364 in raise () from /lib/libc.so.6
(gdb) up
#4 0x407e189b in abort () from /lib/libc.so.6
(gdb) up
#5 0x08077a97 in __cxxabiv1::__terminate(void (*)()) ()
(gdb) up
#6 0x08077ae4 in std::terminate() ()
(gdb) up
#7 0x08076e77 in __cxa_pure_virtual ()
(gdb) up
#8 0x0805dd4e in Player::_start_routine(void*) (arg=0x80f3f98) at mediaplayer/player.cpp:250



player.cpp:250内容如下:
pPlayer->m_pDecoder->play();

这个Decoder::play()是一个pure virtual function,在这里pPlayer->m_pDecoder是一个MP3Decoder,继承于Decoder

注明:程序在播放一首歌曲的时候实际上是一个独立的线程,在切换歌曲的时候一般运行正常,但是如果切换速度非常快,切了几首就会出现gdb上面的提示。可能是什么原因?
...全文
586 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qhgary 2004-12-27
  • 打赏
  • 举报
回复
在linuxsir的论坛上找到了答案。原因就是线程切换的时候,一个清空了虚函数表,另外一个线程却正要用。是资源的互斥没有处理好。谢谢大家
kz 2004-12-20
  • 打赏
  • 举报
回复
把你的程序简化一下,贴上来。
qhgary 2004-12-19
  • 打赏
  • 举报
回复
#7 0x08076e77 in __cxa_pure_virtual ()
这里什么意思?
大雾 2004-12-18
  • 打赏
  • 举报
回复
线程切换的源码?
qhgary 2004-12-18
  • 打赏
  • 举报
回复
纯虚函数不实现能编译通过么?我可是能够运行的,只是在特定情况下(快速线程切换的时候)出现的这样的情况
datuhao 2004-12-17
  • 打赏
  • 举报
回复
纯虚函数有实现吗?
我最近也碰到这个问题,一起探讨下吧:)
不过我感觉问题应该不在这个地方
gaoxianfeng 2004-12-17
  • 打赏
  • 举报
回复
应该是对设备操作时候出现的问题

23,124

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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