Работа со звуковой картой в Linux. Понимание первого примера (почему не UB?) - PullRequest
0 голосов
/ 17 ноября 2018

Я читаю ALSA учебник и столкнулся с некоторым недоразумением. В разделе 2. Basic PCM audio приведен пример кода:

snd_pcm_t *pcm_handle;          //uninitialized
snd_pcm_stream_t stream = SND_PCM_STREAM_PLAYBACK;
snd_pcm_hw_params_t *hwparams;
char *pcm_name;
pcm_name = strdup("plughw:0,0");
snd_pcm_hw_params_alloca(&hwparams); //macro, must be ok
if (snd_pcm_open(&pcm_handle, pcm_name, stream, 0) < 0) { // <--- !!HERE!!
  fprintf(stderr, "Error opening PCM device %s\n", pcm_name);
  return(-1);
}

Я не понимаю, почему это не UB. Мы передаем &pcm_handle в унифицированном виде snd_pcm_open(&pcm_handle, pcm_name, stream, 0), который должен быть UB. Почему это нормально?

1 Ответ

0 голосов
/ 17 ноября 2018

Вы не "используете неинициализированный указатель".Вы берете его адрес для чего-то другого, чтобы сохранить значение для него.Указатель красная сельдь.Это ничем не отличается от int x; scanf("%d", &x);

...