捕获音频后,我使用
snd_pcm_drain(phandle);
snd_pcm_close(phandle);
关闭PCM 但我得到了双重免费或腐败(!pre):0x01694880 ***"错误
首先,我使用以下函数初始化pcm句柄;
static snd_pcm_t *handle;
int initExtAudio()
{
snd_pcm_hw_params_t *params;
const char *card = "hw:0,0";
snd_pcm_open(&handle, card, SND_PCM_STREAM_CAPTURE, 0);
snd_pcm_hw_params_alloca(¶ms);
snd_pcm_hw_params_any(handle, params);
snd_pcm_hw_params_set_access(handle, params, SND_PCM_ACCESS_RW_INTERLEAVED);
snd_pcm_hw_params_set_channels(handle, params, 2);
snd_pcm_hw_params(handle, params);
return 0;
}
然后,我使用snd_pcm_readi(handle, buffer, frames);
来读取pcm数据并保存;
最后,我使用uninit函数来关闭pcm句柄:
snd_pcm_drain(handle);
snd_pcm_close(handle);
init - >阅读 - > uninit - > init - >阅读 - > uninit,当第二次取消时,它出现错误:double free or corruption(!pre):0x01694880 ***
,那么我应该如何避免这个错误呢?当声卡关闭时,我应该取下手柄,当下次打开时我应该再次启动它,对吗?