title: Pointer to local outside scope
body: <p>A function returns the address of a stack variable, which will cause unintended program behavior, typically in the form of a crash.
  The following function returns a stack address:</p>
  
  <pre><code>int init(char *device, DriverType driver)
  {
      int rv = -1;
  
      if (autodetect) {
          void *md;
          const char *p = NULL;
          char buf[PATH_MAX];
  
          *device = 0;
          md = discover_media_devices();
          if (!md) {
              fprintf (stderr, "open: Failed to open \"auto\" device");
              if (*device)
                  fprintf (stderr, " at %s\n", device);
              else
                  fprintf (stderr, "\n");
              goto failure;
          }
  
          while (1) {
              p = get_associated_device(md, p, MEDIA_V4L_RADIO, NULL, NONE);
              if (!p)
                  break;
              snprintf(buf, sizeof(buf), "/dev/%s", p);
              device = &amp;buf[0];
          }
  
      free_media_devices(md);
      /* out_of_scope: Variable "buf" goes out of scope */
      }
  
      switch (driver) {
              case DRIVER_ANY:
              case DRIVER_V4L2:
              default:
                      goto try_v4l2;
              case DRIVER_V4L1:
                      goto try_v4l1;
      }
  
  try_v4l1:
      dev = v4l1_radio_dev_new();
      /* use_invalid: Using "device", which points to an out-of-scope variable "buf" */
      rv = dev-&gt;init (dev, device);
      ----------------------------
  
  try_v4l2:
      dev = v4l2_radio_dev_new();
      /* use_invalid: Using "device", which points to an out-of-scope variable "buf" */
      rv = dev-&gt;init (dev, device);
      ----------------------------
  
  failure:
      return rv;
  }
  </code></pre>
  
  <p>Please help to solve this issue in code</p>