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:
|
You can look at examples of errors detected by the V558 diagnostic. |