MISRAC++2008-7-5-1_b
Synopsis
(Required) A function shall not return a reference or a pointer to an automatic variable (including parameters), defined within the function.
Enabled by default
Yes
Severity/Certainty
High/High

Full description
A function might return an address on the stack. This check is identical to MEM-stack, MISRAC++2023-6.8.2_b, MISRAC2004-17.6_a, MISRAC2012-Rule-18.6_a, CERT-DCL30-C_a.
Coding standards
- CERT DCL30-C
Declare objects with appropriate storage durations
- CWE 562
Return of Stack Variable Address
- MISRA C:2004 17.6
(Required) The address of an object with automatic storage shall not be assigned to another object that may persist after the first object has ceased to exist.
- MISRA C:2012 Rule-18.6
(Required) The address of an object with automatic storage shall not be copied to another object that persists after the first object has ceased to exist
- MISRA C++ 2023 6.8.2
(Mandatory) A function must not return a reference or a pointer to a local variable with automatic storage duration
Code examples
The following code example fails the check and will give a warning:
int *example(void) {
int a[20];
return a; //a is a local array
}
The following code example passes the check and will not give a warning about this issue:
#include <stdlib.h>
int* example(void) {
int *p,i;
p = (int *)malloc(sizeof(int));
return p; //OK - p is dynamically allocated
}