Categories

Smart pointers...

Can someone explain me the following behaviour:

I have the following smart pointer:

class AlsaHwParams
{
public:
    AlsaHwParams() : m_params(0) 
    { snd_pcm_hw_params_alloca (&m_params); }
 
    ~AlsaHwParams() 
    { if (m_params != 0) snd_pcm_hw_params_free (m_params); }
 
    operator snd_pcm_hw_params_t*() { return m_params; }
private:
    snd_pcm_hw_params_t *m_params;
};

Thing is: It doesn’t work. Alsa behaves very strange if I use it. Even if I make the m_params member public and access it directly. The only way it works is to not allocate from inside the class but outside like

snd_pcm_hw_params_alloca (&(hwparams.m_params));

Update: Seems replacing _alloca with _malloc fixes it.
Update: Duh, that is because alloca allocates on stack and not on heap.

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">