Ошибка ALSA закрыть PCM - PullRequest
       18

Ошибка ALSA закрыть PCM

0 голосов
/ 28 апреля 2018

После захваченного звука я использую

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(&params);

    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 ***, как же мне избежать этой ошибки? когда звуковая карта была выключена, я должен отключить ручку, когда в следующий раз она будет включена, я должен снова ее инициализировать, верно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...