windows系统的waveoutopen有内存泄漏?

anstern 2011-04-27 06:35:56
直接调用windows系统的API函数,先运行waveoutopen,再运行waveoutclose,参数没有传错,但用任务管理器观看后,发现多产生30多个句柄,导致内存泄漏,请问大家怎么回事?
...全文
44 点赞 收藏 5
写回复
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后,还是没有降下来么?
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告