ioctl使用全局数组返回错误地址

时间:2015-01-15 02:26:34

标签: c linux system-calls alsa

我正在研究ALSA基于这篇文章:http://equalarea.com/paul/alsa-audio.html#interruptex(一个最小的中断驱动程序)

注意short buf[4096];如果我们将其声明为全局,则会提示错误地址错误。如果我们将其声明为int playback_callback (snd_pcm_sframes_t nframes)的本地,则它会运行并且有时会提示错误的地址错误。如果我们使用malloc分配buf,错误就会消失。

正如我从snd_pcm_writei的源代码中看到的那样,它调用ioctl将缓冲区发送到设备。那么,为什么ioctl表现得像我描述的那样?

我正在使用Ubuntu 14.04 64位

1 个答案:

答案 0 :(得分:1)

那个程序是错误的。

buf有足够的空间容纳4096个样本,但设备配置为每帧两个样本,因此4096帧将溢出缓冲区。