Winapi waveOutOpen抛掷后释放pwfx

Winapi waveOutOpen抛掷后释放pwfx,winapi,waveout,Winapi,Waveout,据微软称: “您可以在将此[pwfx]结构传递给waveOutOpen后立即释放它。” 但这一准则似乎并不一致: pwfx=new WAVEFORMATEX; pwfx->wFormatTag=WAVE_FORMAT_PCM; pwfx->nChannels=2; pwfx->nSamplesPerSec=SPS; pwfx->nAvgBytesPerSec=SPS*2; pwfx->nBlockAlign=2; pwfx->wBitsPerSample=8;

据微软称: “您可以在将此[pwfx]结构传递给waveOutOpen后立即释放它。”

但这一准则似乎并不一致:

pwfx=new WAVEFORMATEX;
pwfx->wFormatTag=WAVE_FORMAT_PCM;
pwfx->nChannels=2;
pwfx->nSamplesPerSec=SPS;
pwfx->nAvgBytesPerSec=SPS*2;
pwfx->nBlockAlign=2;
pwfx->wBitsPerSample=8;
mmres=waveOutOpen(&ghwo,uDeviceID,pwfx,dwCallback,dwCallbackInstance,fdwOpen);
delete pwfx;

您不需要
新建
删除
任何内容。您只需执行以下操作:

WAVEFORMATEX wfx = { };
wfx.wFormatTag=WAVE_FORMAT_PCM;
...
mmres=waveOutOpen(&ghwo,uDeviceID,&wfx,dwCallback,dwCallbackInstance,fdwOpen);

这有帮助吗?

我在您提供的代码中看到的唯一问题是您没有完全初始化结构。您没有初始化
cbSize
,在本例中,它必须设置为
0

假设您没有在这个结构的末尾分配任何额外的数据,那么就没有必要在堆中分配它


问题完全可能存在于传递给函数的其他参数中。我们看不到他们的任何细节,因此无法发表评论

我可以,但这不能回答我的问题。无论如何,谢谢你,正如@DavidHeffernan所说,问题一定出在别处。此外,请张贴文字,而不是图片。谢谢。API可以与结构末尾的其他数据一起使用,这就是文档描述释放结构的原因。在这种情况下,通常在堆上进行分配。当然,这里的情况并非如此。在这种情况下,我想问题将出现在我们看不到的代码中。