После захваченного звука я использую
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 -> read -> uninit -> init -> read -> uninit, при повторном удалении во второй раз возникает ошибка: double free or corruption(!pre):0x01694880 ***
, как же мне избежать этой ошибки? когда звуковая карта была выключена, я должен отключить ручку, когда в следующий раз она будет включена, я должен снова ее инициализировать, верно?