VC6.0 发生异常 怎么解决

张亚成 2014-04-15 03:31:48
使用VC6.0做一个MFC程序,其中用到了线程,WaveOut相关的声音播放函数。

但是在程序中的线程执行结束的时候出现了问题。 请问该怎么解决。 谢谢了 !

如下错误提示:


问题签名:
问题事件名称: APPCRASH
应用程序名: testG711uPlayer.exe
应用程序版本: 1.0.0.1
应用程序时间戳: 534cd103
故障模块名称: wdmaud.drv
故障模块版本: 6.1.7601.17514
故障模块时间戳: 4ce7ba26
异常代码: c0000005
异常偏移: 00010af2
OS 版本: 6.1.7601.2.1.0.256.1
区域设置 ID: 2052
其他信息 1: 0a9e
其他信息 2: 0a9e372d3b4ad19135b953a78882e789
其他信息 3: 0a9e
其他信息 4: 0a9e372d3b4ad19135b953a78882e789

联机阅读隐私声明:
http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0804

如果无法获取联机隐私声明,请脱机阅读我们的隐私声明:
C:\Windows\system32\zh-CN\erofflps.txt
...全文
336 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
张亚成 2014-04-16
  • 打赏
  • 举报
回复
引用 1 楼 crestine 的回复:
这个 wdmaud.drv 文件是微软 WDM Audio driver mapper 驱动程序。从你给出的截图来看,像是程序的收尾工作没有做好,导致程序崩溃。建议楼主贴出相关代码。
收尾工作好着呢 !!!
xiaohuh421 2014-04-16
  • 打赏
  • 举报
回复
调试运行你的程序, 单步执行, 直到这个错误蹦出来, 就可以定位到错误. 或者打日志的方式, 跟踪程序崩溃位置.
张亚成 2014-04-16
  • 打赏
  • 举报
回复
感谢 xiaohuh421 的 指导, 程序在结束时候使用那个waveOutClose之前没有使用 waveOutReset 。 结束时候应该写成 if (bPlay) { waveOutUnprepareHeader(hwo, &wh, sizeof(WAVEHDR)); } waveOutReset(hwo); waveOutClose(hwo); return 0; }
xiaohuh421 2014-04-16
  • 打赏
  • 举报
回复
waveOutWrite 有没有错误处理. 初步判断是这个函数执行失败, 而你没有判断就直接wait.
zgl7903 2014-04-16
  • 打赏
  • 举报
回复
c0000005 访问非法地址, vs打开异常c0000005捕捉 调试下
张亚成 2014-04-16
  • 打赏
  • 举报
回复
引用 9 楼 xiaohuh421 的回复:
这种情况, 只能打日志了, 看运行到哪行出的错.
屏蔽了 waveOutWrite 和 WaitForSingleObject(wait.m_hObject, INFINITE); 两行程序没有发生异常,说明程序问题可能出在 wait 这个CEvent上,但是确实不知道咋回事儿, 方便 QQ 指点一下吗 ? 我 QQ : 735425967 谢谢。
xiaohuh421 2014-04-16
  • 打赏
  • 举报
回复
这种情况, 只能打日志了, 看运行到哪行出的错.
张亚成 2014-04-16
  • 打赏
  • 举报
回复
引用 6 楼 xiaohuh421 的回复:
调试运行你的程序, 单步执行, 直到这个错误蹦出来, 就可以定位到错误. 或者打日志的方式, 跟踪程序崩溃位置.
单步声音播放结束的时候, 出现问题的时候显示的调用堆栈是内核调用。堆栈上没有显示到API函数上。看不到错在调用错误的哪儿?
张亚成 2014-04-15
  • 打赏
  • 举报
回复
更新了系统声卡驱动之后提示的错误又变成 查看问题详细信息展开后如下: 问题签名: 问题事件名称: APPCRASH 应用程序名: testG711uPlayer.exe 应用程序版本: 1.0.0.1 应用程序时间戳: 534cfe54 故障模块名称: msvcrt.dll 故障模块版本: 7.0.7601.17744 故障模块时间戳: 4eeaf722 异常代码: c0000005 异常偏移: 00009b60 OS 版本: 6.1.7601.2.1.0.256.1 区域设置 ID: 2052 其他信息 1: 0a9e 其他信息 2: 0a9e372d3b4ad19135b953a78882e789 其他信息 3: 0a9e 其他信息 4: 0a9e372d3b4ad19135b953a78882e789 联机阅读隐私声明: http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0804 如果无法获取联机隐私声明,请脱机阅读我们的隐私声明: C:\Windows\system32\zh-CN\erofflps.txt
张亚成 2014-04-15
  • 打赏
  • 举报
回复
程序中使用了一个线程播放已经保存在list中的数据 节点结构体是包含: nLen; \\ 音频数据长度 Data[640]; \\ 音频数据 UINT PlaySoundProc(LPVOID lpParam) { HWAVEOUT hwo; WAVEHDR wh; WAVEFORMATEX wfx; CEvent wait; unsigned long frames = 0; unsigned long pos = 0; unsigned long playTimes = 0; int ret = 0 ; HI_U8 buf[1 << 16]; HI_U8 tempBuf[1 << 16]; memset(buf, 0, sizeof(buf)); memset(tempBuf, 0 ,sizeof(tempBuf)); wfx.cbSize = ((WAVEFORMATEX*)lpParam)->cbSize; wfx.nAvgBytesPerSec = ((WAVEFORMATEX*)lpParam)->nAvgBytesPerSec; wfx.nBlockAlign = ((WAVEFORMATEX*)lpParam)->nBlockAlign; wfx.nChannels = ((WAVEFORMATEX*)lpParam)->nChannels; wfx.nSamplesPerSec = ((WAVEFORMATEX*)lpParam)->nSamplesPerSec; wfx.wBitsPerSample = ((WAVEFORMATEX*)lpParam)->wBitsPerSample; wfx.wFormatTag = ((WAVEFORMATEX*)lpParam)->wFormatTag; ret = waveOutOpen(&hwo, WAVE_MAPPER, &wfx, (ULONG)(wait.m_hObject), 0L, CALLBACK_EVENT); BOOL bPlay = FALSE; list<G711u_FrameData>::iterator iter = g_lstFrameData.begin(); while ( !g_lstFrameData.empty()) { memcpy(tempBuf + pos, iter->Data, iter->nLen); pos += iter->nLen; frames ++; if ((pos + iter->nLen) > sizeof(tempBuf) || 1 == g_lstFrameData.size()) { // 播放一次数据 memcpy(buf, tempBuf, pos); wh.lpData = (LPSTR)buf; wh.dwBufferLength = pos; wh.dwFlags = 0L; wh.dwLoops = 1L; bPlay = TRUE; waveOutPrepareHeader(hwo, &wh, sizeof(WAVEHDR)); waveOutWrite(hwo, &wh, sizeof(WAVEHDR)); WaitForSingleObject(wait.m_hObject, INFINITE); playTimes ++; frames = 0; pos = 0; } // 删除list上头结点那一帧数据 g_lstFrameData.pop_front(); iter = g_lstFrameData.begin(); } if (bPlay) { waveOutUnprepareHeader(hwo, &wh,sizeof(WAVEHDR)); } waveOutClose(hwo); return 0; }
oyljerry 2014-04-15
  • 打赏
  • 举报
回复
点击调试程序,用编译器查看代码
caewow 2014-04-15
  • 打赏
  • 举报
回复
这个 wdmaud.drv 文件是微软 WDM Audio driver mapper 驱动程序。从你给出的截图来看,像是程序的收尾工作没有做好,导致程序崩溃。建议楼主贴出相关代码。

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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