diff --git a/pd/src/s_audio_alsa.c b/pd/src/s_audio_alsa.c
index 88dc9b74c2a5ec1f4edd73c383db28d992810d08..91fc385fe19b4a07d9c4f8c243650321ab1e2ad7 100644
--- a/pd/src/s_audio_alsa.c
+++ b/pd/src/s_audio_alsa.c
@@ -839,7 +839,7 @@ void alsa_getdevs(char *indevlist, int *nindevs,
     while (!snd_card_next(&cardno) && cardno >= 0)
     {
         snd_ctl_t *ctl;
-        snd_ctl_card_info_t *info;
+        snd_ctl_card_info_t *info = NULL;
         char devname[80];
         const char *desc;
         if (2 * ndev + 2  > maxndev)
@@ -854,7 +854,6 @@ void alsa_getdevs(char *indevlist, int *nindevs,
             snd_ctl_card_info_malloc(&info);
             snd_ctl_card_info(ctl, info);
             desc = snd_ctl_card_info_get_name(info);
-            //snd_ctl_card_info_free(info);
         }
         else
         {
@@ -867,6 +866,11 @@ void alsa_getdevs(char *indevlist, int *nindevs,
         sprintf(outdevlist + 2*ndev * devdescsize, "%s (hardware)", desc);
         sprintf(outdevlist + (2*ndev + 1) * devdescsize, "%s (plug-in)", desc);
         ndev++;
+        if (info)
+        {
+            snd_ctl_card_info_free(info);
+            info = NULL;
+        }
     }
     for (i = 0, j = 2*ndev; i < alsa_nnames; i++, j++)
     {