windows系统的waveoutopen有内存泄漏?

anstern 2011-04-27 06:35:56
直接调用windows系统的API函数,先运行waveoutopen,再运行waveoutclose,参数没有传错,但用任务管理器观看后,发现多产生30多个句柄,导致内存泄漏,请问大家怎么回事?
...全文
96 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2011-04-28
  • 打赏
  • 举报
回复
你确定循环1万次就多了30万个句柄?别随便相信资源管理器。
anstern 2011-04-28
  • 打赏
  • 举报
回复
简单写了一段代码,还是有泄漏,请大家帮忙分析一下原因?

// TODO: Add your control notification handler code here
HWAVEOUT hWaveOut=NULL;
WAVEOUTCAPS pwoc;


int wChannels = 1;
int dwSamplesPerSec = 8000;
int dwBitsPerSample = 16;

WAVEFORMATEX lpFormat;
lpFormat.cbSize = sizeof(WAVEFORMATEX);
lpFormat.nChannels = wChannels;
lpFormat.wBitsPerSample = dwBitsPerSample;
lpFormat.nBlockAlign = wChannels*dwBitsPerSample/8;
lpFormat.nSamplesPerSec = dwSamplesPerSec;
lpFormat.wFormatTag = WAVE_FORMAT_PCM;
lpFormat.nAvgBytesPerSec = lpFormat.nBlockAlign*dwSamplesPerSec;


BOOL bRes;

bRes=waveOutOpen(&hWaveOut, WAVE_MAPPER, &lpFormat, NULL, NULL, CALLBACK_NULL);

bRes=waveOutReset((HWAVEOUT)hWaveOut);

bRes = waveOutClose((HWAVEOUT)hWaveOut);
anstern 2011-04-28
  • 打赏
  • 举报
回复
资源管理器都不能相信,相信谁呢?
「已注销」 2011-04-27
  • 打赏
  • 举报
回复
Remarks

If the device is still playing a waveform-audio file, the close operation fails. Use the waveOutReset function to terminate playback before calling waveOutClose.

或者说,你确定关闭成功了吗?
「已注销」 2011-04-27
  • 打赏
  • 举报
回复
首先,多产生句柄不叫内存泄露,叫资源泄露。
你确定waveoutclose后,还是没有降下来么?

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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