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. |