At Thu, 13 Mar 2008 15:41:02 -0300, Aldrin Martoq wrote: > > Hello, > > On Thu, Mar 13, 2008 at 1:44 PM, Takashi Iwai <tiwai@xxxxxxx> wrote: > > At Thu, 13 Mar 2008 16:21:51 +0000, > > Alan Horstmann wrote: > > > I've spent a couple of days pining this down. > > > snd_pcm_hw_params_alloca() is part of the user API -right? But accomplished > > > as a #define in pcm.h. > > Because alloca can be used only with a macro due to its nature. > > > However if it is called inside a function, and the pointer stored for future > > > use, after leaving the function the allocation seems to have gone, and > > > attempting thereafter to use the pointer to access the hwparams space in > > > another API function results in seg-fault. > > You should use snd_pcm_hw_params_malloc() instead. *_alloca() from > asoundlib are based in alloca(). From my system man: > > $ man alloca > NAME > alloca - memory allocator > > SYNOPSIS > #include <alloca.h> > > void *alloca(size_t size); > > DESCRIPTION > The alloca() function allocates size bytes of space in the stack frame > of the caller. This temporary space is automatically freed when the > function that called alloca() returns to its caller. > > [..] > > Yup, this is actually very useful in many many many places! Especially in C, that isn't easy to have implicit destructors. BTW, a pitfall once I fell into is that the alloca frees the data at the function exit, not at the block exit. So, the following code eats stack up and shall evetually dies: { ... for (;;) { char *tmp = alloca(4096); ... } ... } Takashi _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel