# V558. Function returns pointer/reference to temporary local object.

The analyzer detected an issue when a function returns a pointer to a local object. This object will be destroyed when leaving the function, so you will not be able to use the pointer to it anymore.

In a most common case, this diagnostic message is generated against the following code:

    float *F()
    {
      float f = 1.0;
      return &f;
    }

Of course, the error would hardly be present in such a form in real code. Let's consider a more real example.

    int *Foo()
    {
      int A[10];
      // ...
      if (err)
        return 0;

      int *B = new int[10];
      memcpy(B, A, sizeof(A));

      return A;
    }

Here, we handled the temporary array A. On some condition, we must return the pointer to the new array B. But the misprint causes the A array to be returned, which will cause unexpected behavior of the program or crash. This is the correct code:

    int *Foo()
    {
      ...
      int *B = new int[10];
      memcpy(B, A, sizeof(A));
      return B;
    }

This diagnostic is classified as:

CWE-562 CERT-DCL30-C

You can look at examples of errors detected by the V558 diagnostic.