C 在Linux中使用声卡。理解第一个示例(为什么不理解UB?)

C 在Linux中使用声卡。理解第一个示例(为什么不理解UB?),c,linux,undefined-behavior,alsa,C,Linux,Undefined Behavior,Alsa,我正在读《ALSA》,遇到了一些误解。在2中。基本PCM音频部分有一个代码示例: 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(&

我正在读《ALSA》,遇到了一些误解。在<代码>2中。基本PCM音频部分有一个代码示例:

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);
}
snd_pcm_t*pcm_手柄//未初始化
snd_pcm_stream_t stream=snd_pcm_stream_回放;
snd_pcm_hw_params_t*hwparams;
字符*pcm_名称;
pcm_name=strdup(“plughw:0,0”);
snd\u pcm_UHW_params_alloca(&hwparams)//宏,必须正常

如果(snd_pcm_open(&pcm_handle,pcm_name,stream,0)<0){/您不是在“使用未初始化的指针”。您是将它的地址作为其他对象来存储一个值。指针是一个红鲱鱼。这与
int x;scanf(“%d”,&x);

它是一个“out参数”@但是如果一个指针被单位化并被使用,它就是UB,不是吗?不,为什么使用未初始化的指针会是未定义的行为?它会在
snd\u pcm\u open
中被赋值。它在初始化之前不会被取消引用。你见过
Stuff;init\u Stuff(&Stuff)吗
idiom?@n.m.已经读过了,谢谢。理解。据我所知,
hwparams
具有自动存储持续时间,并且已经由我正在使用的操作地址初始化为未确定的值。正确吗?